gpt4 book ai didi

elasticsearch - 如何在ElasticSearch中匹配 “prefix”而不是整个字符串?

转载 作者:行者123 更新时间:2023-12-03 00:14:29 27 4
gpt4 key购买 nike

我已为文档建立索引,每个文档都有一个字段:“CodeName”,其值类似于以下内容:

document 1 has CodeName: "AAA01"
document 2 has CodeName: "AAA02"
document 3 has CodeName: "AAA03"
document 4 has CodeName: "BBB02"

当我尝试在字段上使用匹配查询时:
query: {
"match": {
"CodeName": "AAA"
}
}

我希望得到“AAA01”和“AAA02”的结果,但是,我得到的是空数组。当我输入“AAA01”(输入整个内容)时,会得到结果。如何使它更广泛地匹配?我尝试使用“前缀”代替“匹配”,并且遇到了同样的问题。

“CodeName”的映射是“type”:“string”。

最佳答案

I expect to get results for "AAA01" and "AAA02"



这不是Elastic Search期望的。 ES使用您指定的 token 生成器将字符串分解为 token 。如果您未指定任何标记器/分析器,则默认标准标记器会在空格和连字符等处拆分单词。在您的情况下,标记将存储为“AAA01”,“AAA02”,依此类推。没有“AAA”这样的术语,因此您不会得到任何结果。

要解决此问题,您可以使用match_phrase_prefix查询或将匹配查询的类型设置为statement_prefix。试试这个代码:
"query": {
"match_phrase_prefix": {
"CodeName": "AAA"
}
}

要么
"query": {
"match": {
"CodeName": {
"query": "AAA",
"type": "phrase_prefix"
}
}
}

这里是文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html。还请注意max_expansions参数,因为此查询有时可能会很慢,具体取决于您的数据。

请注意,对于这种技术,您应该使用默认映射。您不要不使用nGram。

关于elasticsearch - 如何在ElasticSearch中匹配 “prefix”而不是整个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37537008/

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