elasticsearch - Elasticsearch批量或搜索

标签 elasticsearch

背景

我正在使用一个API,该API允许用户传递有关成员的详细信息列表(姓名,电子邮件地址等)。我想使用此信息与我的Elasticsearch数据库中的帐户记录进行匹配并返回一个列表潜在的比赛。

我认为这就像在想要的字段上进行 bool(boolean) 查询一样简单,但是我似乎没有获得任何成功。

我是Elasticsearch的新手,我当前的_search请求看起来像这样。

示例查询

POST /成员(member)/帐户/ _搜索

{
    "query" : {
        "filtered" : {
            "filter" : {
                "bool" : {
                    "should" [{
                        "term" : {
                             "email": "jon.smith@gmail.com"
                        }
                    },{
                        "term" : {
                             "email": "samy@gmail.com"
                        }
                    },{
                        "term" : {
                             "email": "bo.blog@gmail.com"
                        }
                    }]
                }
            }
        }
    }
}

问题

如何更新此查询以返回与任何电子邮件地址匹配的记录?

我可以区分与电子邮件和其他字段匹配的记录的优先级吗?示例“family_name”。

如果我需要针对几百个电子邮件地址进行处理,这会是一个问题吗?

最佳答案

好了,您需要在索引端而不是查询端进行更改。

默认情况下,您的电子邮件ID分为
jon.smith@gmail.com => [jon,smith,gmail,com]

索引时。

现在,当您使用术语查询进行搜索时,它不会应用分析器,而是会尝试获取jon.smith@gmail.com的完全匹配项,如您所见,它将无法正常工作。
即使使用match query,也将最终使所有文档都匹配。
因此,您需要将映射更改为索引电子邮件ID作为单个 token ,而不是对其进行 token 化。
因此,使用not_analyzed将是最好的解决方案。
当您将电子邮件字段定义为not_analyzed时,在编制索引时会发生以下情况。
jon.smith@gmail.com => [jon.smith@gmail.com]

更改映射并为所有文档建立索引之后,现在您可以自由运行上述查询。

我建议使用以下术语查询-

{
  "query": {
    "terms": {
      "email": [
        "jon.smith@gmail.com",
        "samy@gmail.com",
        "bo.blog@gmail.com"
      ]
    }
  }
}

要回答您问题的第二部分-您正在寻求提升,建议您阅读function score query

关于elasticsearch - Elasticsearch批量或搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29640673/

相关文章:

amazon-web-services - elasticsearch-cloud-aws 插件不适用于 IAM 角色

elasticsearch - 从Elastic Search中的索引中删除现有字段

elasticsearch - Elasticsearch 最多可以索引多少个字段?

php - 如何解析PHP中的elasticsearch响应

amazon-web-services - 将ElasticSearch集群的EBS卷类型从Magnetic切换到SSD

elasticsearch - 在子域中进行排除搜索(MUSTNOT)

elasticsearch - 使用 Query DSL 查询字段是否包含字符串

elasticsearch - Logstash 检查嵌套 json 中的字段是否存在

mongodb - Elasticsearch MongoDb河引用处理

elasticsearch - ElasticSearch 5字段名称压缩