gpt4 book ai didi

elasticsearch - 意外的区分大小写

转载 作者:行者123 更新时间:2023-12-03 02:02:23 28 4
gpt4 key购买 nike

我是运行 Elasticsearch 1.5.9的菜鸟。我想拉出所有将“PERSON”字段设置为“Johnson”的文档。 (注意混合套管)。如果我手动查看 Elasticsearch head,则可以看到具有这些属性的文档。

docs解释了我应该构造一个过滤器查询以提取此文档。但是当我这样做时,我会得到一些意想不到的行为。

这有效。如预期的那样,它仅返回一个包含Person =“Johnson”的文档

query = {"filter": {"term" : { "PERSON" : "johnson" }}}

但这行不通
query = {"filter": {"term" : { "PERSON" : "Johnson" }}}

如果仔细观察,您会发现好的查询是小写的,但是差的查询是大小写混合的-即使PERSON字段设置为“Johnson”。

更加奇怪的是,我将 full_text字段中的所有内容都缩小了: "_source": { "full_text": "all lower case"因此,全文包括 johnson,我认为这完全与PERSON字段无关。

这是怎么回事?如何在“人”字段中进行大小写混合搜索?

最佳答案

字词查询不会分析您的搜索文本。
这意味着您需要分析并以 token 格式提供查询,以使术语查询真正起作用。
使用match query代替,事情将像魔术一样工作。

因此,当像下面这样的字符串进入Elasticsearch时,将其标记化(或分析)并存储

"Green Apple" -> ( "green" , "apple")

这是分析的默认行为。
现在,当您使用术语查询进行搜索时,将不会进行分析。
对于Apple而言,它搜索保留大小写的Apple token 。因此失败了。

对于匹配查询,它会进行分析。这意味着,如果您使用Apple搜索,它将转换为Apple,然后进行搜索。哪个能给出很好的匹配。

您可以了解更多关于分析 here的信息。

关于elasticsearch - 意外的区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30747207/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com