Elasticseatch完全匹配或部分匹配

时间:2018-10-01 16:25:10

标签: elasticsearch search

我的想法是创建完全/部分匹配。因此,如果在任何字段中找到完全匹配,则仅返回它。如果没有完全匹配,则返回所有部分匹配。为了说明,我将在电子邮件中举例说明。 我使用 standart分析器,并将电子邮件映射为文本

举个例子,我们将以下电子邮件编入索引:

  1. one@gmail.com
  2. two@gmail.com
  3. three@gmail.com
  4. four@hotmail.com

如果查询字符串为“ one@gmail.com”,则仅应返回one@gmail.com。

如果查询字符串为“ gmail.com”,则应返回所有gmail电子邮件。

我目前必须查询:

{"query": {
   "multi_match":{
      "query":"one@gmail.com",
      "fields":["email", "other_fileds"],
      "type":"phrase"
}

当使用标准分析仪和文本映射时,该匹配项将找到完全匹配的内容。

{"query": {
    "query_string":{
       "query":"gmail.com",
}

这将找到所有部分匹配项。

我需要以某种方式将它们与OR结合起来。


到目前为止,我遵循了评论的建议并执行以下操作: 首先,我使用短语匹配

进行搜索
{"query": 
   {"query_string":
      {
         "query":"one@gmail.com",
         "type":"phrase"
      }
   } 
}

如果没有点击,我进行第二次搜索:

{"query": 
       {"query_string":
          {
             "query":"one@gmail.com",
          }
       } 
    }

在大多数情况下,这往往效果很好。但是,当搜索查询包含来自不同字段的大量数据时,以下情况将失败。例如“ one@gmail.com Alex 095111111”。

0 个答案:

没有答案