gpt4 book ai didi

elasticsearch - Elasticsearch:仅搜索单词形式

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

我有文档集合,他们有tags字段,它是字符串数组。每个字符串是一个单词。
例:

[{
"id": 1,
"tags": [ "man", "boy", "people" ]
}, {
"id": 2,
"tags":[ "health", "boys", "people" ]
}, {
"id": 3,
"tags":[ "people", "box", "boxer" ]
}]

现在,我只需要查询包含单词“boy”及其形式(在我的示例中为“boys”)的文档。我不需要elasticsearch返回3号文档,因为它不是男孩的形式。

如果我使用 fuzzy查询,我将获得所有三个文档以及不需要的3号文档。据我了解,elasticsearch使用levenshtein距离来确定doc是否相关。

如果我使用 match查询,我只会得到数字1,而不会两者都得到(1,2)。

我想知道是否可以通过单词形式匹配来查询文档。有没有办法使 flex 匹配“公爵”,“公爵夫人”,“公爵”而不是“堤防”,“公爵”,“自行车”等等?对于“duke”,这是更复杂的情况,但我也需要支持这种情况。

可能可以使用分析仪的某些特定设置来解决?

最佳答案

我猜您使用“单词形式匹配”是指匹配同一单词的词形变化。这可能与处理复数,单数,大小写,时态,词缀等有关。请记住,单词变体的规则是特定于语言的

Elasticsearch的模糊性实现基于Damerau–Levenshtein distance。它仅根据编辑时的数量来处理独立于特定语言的突变(更改,变换,换位)。

您将需要在索引编制和搜索时更改字符串的处理,以通过词干处理来解决特定于语言的变化。这可以通过为您的字段配置合适的分析器来完成,该分析器执行的特定语言。

假设您的标签全部为英文,则标签的映射应类似于:

"tags": {
"type": "text",
"analyzer": "english"
}

由于您无法更改现有索引的类型或分析器,因此需要修复映射,然后重新为所有索引编制索引。

我不确定公爵和公爵夫人是否被认为是同一个词(因此,词干必须指出)。如果没有,您将需要使用自定义的分析器来配置同义词。

另请参见Elasticsearch引用: Language Analyzers

关于elasticsearch - Elasticsearch:仅搜索单词形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60489045/

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