栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Elasticsearch中,“ match”查询和“ should”子句的匹配结果超出了要求

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Elasticsearch中,“ match”查询和“ should”子句的匹配结果超出了要求

让我们通过以下映射来了解这一点,例如:

{  "_doc": {    "properties": {      "Id": {        "type": "text",        "fields": {          "keyword": { "type": "keyword", "ignore_above": 256          }        }      },      "Name": {        "type": "text",        "fields": {          "keyword": { "type": "keyword", "ignore_above": 256          }        }      }    }  }}

上面的映射是由elasticsearch动态创建的。现在让我们专注于

Id
领域。其类型为
text
。默认情况下,
analyzer
for
text
数据类型为
standard
Analyzer。当将此分析器应用于此字段的输入时,它将被标记为术语。因此,例如,如果您输入的值
Id
是,则会
33f87d98-024f-4893-aa1c-8d438a98cd1f
生成以下令牌:

33f87d98024f4893aa1c8d438a98cd1f

如您所见,输入值

-
被用作定界符进行拆分。这是因为在其上应用了标准分析仪。

还有另外一个子场下,

Id
这是
keyword
和它的类型
keyword
。对于类型
keyword
,输入将按原样编制索引,而无需进行任何修改。

现在让我们了解为什么要匹配更多文档并且结果计数超出预期。在查询中,您

match
Id
字段使用了查询,如下所示:

{  "match": {    "Id": "b8bf49a4-960b-4fa8-8c5f-a3fce4b4d07b"  }}

默认情况下,匹配查询使用与映射中的字段相同的分析器。因此,

Id
再次对查询中的值应用相同的分析器,并且以与上述类似的方式将输入拆分为令牌。在匹配查询输入字符串的标记之间应用的默认运算符为OR,因此您的查询实际上变为:

b8bf49a4 OR 960b OR 4fa8 OR 8c5f OR a3fce4b4d07b

如果上述任何标记与

Id
字段中存储的任何索引词匹配,则该文档被视为匹配。

基于以上映射的以上解决方案:

请改用关键字字段。因此查询变为:

{  "match": {    "Id.keyword": "b8bf49a4-960b-4fa8-8c5f-a3fce4b4d07b"  }}

有关匹配如何工作的更多信息,请参见此处。

也正如@Curious_MInd在他的回答中提到的那样,使用它

terms
比使用
match
in 更好
should



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397820.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号