gpt4 book ai didi

Elasticsearch 完全匹配分析的字段

转载 作者:行者123 更新时间:2023-11-29 02:43:44 29 4
gpt4 key购买 nike

有没有办法让 ElasticSearch 识别分析字段的精确匹配?理想情况下,我想对我的文档进行小写、标记化、词干化甚至语音化,然后让查询拉出“精确”匹配项。

我的意思是,如果我索引“Hamburger Buns”和“Hamburgers”,它们将被分析为 ["hamburger","bun"] 和 ["hamburger"]。如果我搜索“汉堡包”,它只会返回“汉堡包”文档,因为这是“精确”匹配。

我试过使用关键字标记生成器,但这不会阻止单个标记。我需要做些什么来确保 token 的数量相等吗?

我熟悉多字段和使用“not_analyzed”类型,但这比我正在寻找的更严格。我想要精确匹配,事后分析。

最佳答案

将 shingles tokenizer 与词干提取以及您需要的任何其他内容一起使用。添加类型为 token_count 的子字段,该字段将计算字段中的标记数。

在搜索时,您需要添加一个额外的过滤器来匹配索引中的标记数与搜索文本中的标记数。您将需要一个额外的步骤,当您执行实际搜索时,应该计算搜索字符串中的标记。之所以这样,是因为带状疱疹会创建多个标记排列,您需要确保它与搜索文本的大小相匹配。

一个尝试,只是给你一个想法:

{
"settings": {
"analysis": {
"filter": {
"filter_shingle": {
"type": "shingle",
"max_shingle_size": 10,
"min_shingle_size": 2,
"output_unigrams": true
},
"filter_stemmer": {
"type": "porter_stem",
"language": "_english_"
}
},
"analyzer": {
"ShingleAnalyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"snowball",
"filter_stemmer",
"filter_shingle"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"text": {
"type": "string",
"analyzer": "ShingleAnalyzer",
"fields": {
"word_count": {
"type": "token_count",
"store": "yes",
"analyzer": "ShingleAnalyzer"
}
}
}
}
}
}
}

和查询:

{
"query": {
"filtered": {
"query": {
"match_phrase": {
"text": {
"query": "HaMbUrGeRs BUN"
}
}
},
"filter": {
"term": {
"text.word_count": "2"
}
}
}
}
}

shingles 过滤器在这里很重要,因为它可以创建标记组合。更重要的是,这些是保持顺序或 token 的组合。 Imo,这里最难实现的要求是更改标记(词干提取、小写等),并且还要组装回原始文本。除非您定义自己的“串联”过滤器,否则我认为除了使用 shingles 过滤器之外别无他法。

但对于 shingles,还有另一个问题:它会创建不需要的组合。对于像 “洛杉矶的汉堡面包” 这样的文本,您最终会得到一长串带状疱疹:

          "angeles",
"buns",
"buns in",
"buns in los",
"buns in los angeles",
"hamburgers",
"hamburgers buns",
"hamburgers buns in",
"hamburgers buns in los",
"hamburgers buns in los angeles",
"in",
"in los",
"in los angeles",
"los",
"los angeles"

如果您只对那些完全含义匹配的文档感兴趣,则以上文档仅在您搜索“洛杉矶的汉堡包”时匹配(并且不匹配“任何汉堡包”之类的内容洛杉矶的包子”)那么你需要一种方法来过滤那一长串带状疱疹。我的看法是使用 word_count

关于Elasticsearch 完全匹配分析的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517904/

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