我的想法是创建完全/部分匹配。因此,如果在任何字段中找到完全匹配,则仅返回它。如果没有完全匹配,则返回所有部分匹配。为了说明,我将在电子邮件中举例说明。 我使用 standart分析器,并将电子邮件映射为文本。
举个例子,我们将以下电子邮件编入索引:
如果查询字符串为“ 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”。