当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch批量或搜索

戚衡
2023-03-14

背景资料

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

我以为这将是简单的做一个bool查询领域我想要的,但是我似乎没有得到任何点击。

我对Elasticsearch比较陌生,我当前的搜索请求如下所示。

查询示例

POST/member/account/\u搜索

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

问题

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

我是否能够对符合电子邮件和其他字段的记录进行优先级排序?例如“姓氏”。

如果我需要对几百个电子邮件地址执行此操作,这会是一个问题吗?

共有1个答案

楚彦
2023-03-14

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

默认情况下,您的电子邮件IDjon.smith@gmail.com=

在编制索引时。

现在,当您使用术语查询进行搜索时,它不应用分析器,而是尝试获得jon的精确匹配。smith@gmail.com如你所见,这是行不通的。即使使用匹配查询,最终也会将所有文档作为匹配项获取。因此,您需要将映射更改为将电子邮件ID作为单个标记进行索引,而不是将其标记化。因此,在这里使用未分析的是最佳解决方案。当您将电子邮件字段定义为未分析时,索引时会发生以下情况。乔恩。smith@gmail.com =

更改所有文档的映射和索引后,现在可以自由运行上述查询。

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

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

回答问题的第二部分-您正在寻找提升,并建议进行功能评分查询

 类似资料:
  • 我想问一下关于Elasticsearch批量API的问题 这是我使用批量API的代码 我遇到了超时异常,因为我的记录有800K。java.net.SocketTimeoutException:连接超时30,000毫秒http-outgoing-16[活动] 我试图分解传入的jsonList,但有时会出现相同的错误。 我目前使用的是Elasticsearch 7.6.2版本。 异常跟踪 Java.n

  • 问题内容: 似乎我有一个相似但不相同的查询,因此最好像@Val建议的那样,让其他人从中受益。 因此,类似于上述内容,我需要在索引中插入大量数据(我的初始测试大约是10000个文档,但这只是针对POC,还有更多)。我想插入的数据在.json文档中,看起来像这样(片段): 我自己是ElasticSearch的新手,但是,从阅读文档开始,我的假设是我可以获取.json文件并根据其中的数据创建索引。从那以

  • 问题内容: 我正在尝试将JSON文件批量索引到新的Elasticsearch索引中,但无法这样做。我在JSON中有以下示例数据 我在用 当我尝试使用Elasticsearch的标准批量索引API时,出现此错误 任何人都可以帮助索引这种类型的JSON吗? 问题答案: 您需要做的是读取该JSON文件,然后使用端点期望的格式构建一个批量请求,即,一行用于命令,一行用于文档,并用换行符分隔…冲洗并重复以下

  • 是否可以在ElasticSearch中进行批量原子更新? 我知道定期批量更新不是原子的,正如这里所指出的:https://www.elastic.co/guide/en/elasticsearch/guide/current/bulk.html#bulk 还有其他方法可以自动更新多个文档吗?即。要么所有更新都发生,要么没有更新。

  • 我在Azure上有3个主节点+3个数据节点elasticsearch集群。我试图执行批量操作,但我得到了关于节点本身的失败错误,以下是我如何设置客户端: 下面是批量操作: 它开始对1000个记录批次做出罚款响应,如下所示: 将执行由{1001}个操作组成的新大容量 然后我开始得到以下错误: 传输:383-[Stanley Stewart]未能获取{#传输#-1}{10.0.0.10}{10.0.0

  • 问题内容: 我正在尝试为最终用户提供搜索类型,这更像sqlserver。我能够为给定的SQL场景实现ES查询: 但是ES查询不适用于此sql查询 在我的elasticsearch以及通配符查询中,我还需要执行一些布尔过滤查询 上面的带有通配符搜索的弹性查询可以很好地工作,并让我获得所有与pete匹配且不是xyz和abc类型的文档。但是当我尝试使用以空格分隔的2个独立单词执行通配符时,相同的查询返回