gpt4 book ai didi

elasticsearch - 如何在Elasticsearch中处理无序多词查询?

转载 作者:行者123 更新时间:2023-12-02 22:57:30 25 4
gpt4 key购买 nike

我有以下情况:

简单的分析器处理文本“棕色和绿色的狐狸很快”,并将各个小写字母添加到索引中。

我想对我的索引使用以下查询短语:“quick brown f”

我使用match_phrase_prefix来运行此搜索:

{
"query": {
"match_phrase_prefix" : {
"message" : {
"query" : "quick brown f",
"max_expansions" : 10
}
}
}
}

不幸的是,由于术语的顺序与查询术语不匹配,所以没有返回结果。如果我使用匹配查询并且使用完整字词,我将获得结果。似乎match_phrase_prefix正在检查顺序:

This query works by creating a phrase query out of quick and brown (i.e. the term quick must exist and must be followed by the term brown).



我的问题:

有没有一种方法可以运行查询,该查询可以处理不完整的术语并返回结果,而不管源文档中术语的顺序如何?我目前唯一想到的选择是手动为输入查询中的每个字词创建查询(例如:quick,brown,f),然后使用 bool(boolean) 查询将它们组合在一起。

最佳答案

edge_ngram分析器应该执行您想要的操作。如果将min_gram值设置为1并将max gram值设置为10进行设置,则文档将存储必要的标记。然后,您可以将标准分析器应用于您的查询文本,并将其与edge_ngram文档字段进行匹配。

示例in the documentation与您请求的解决方案几乎完全相同。请注意,在查询中使用了显式的and运算符,以确保您的所有搜索标记(部分或其他)都匹配。

从5.6的文档中:

PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "lowercase"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 10,
"token_chars": [
"letter"
]
}
}
}
},
"mappings": {
"doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
}

PUT my_index/doc/1
{
"title": "Quick Foxes"
}

POST my_index/_refresh

GET my_index/_search
{
"query": {
"match": {
"title": {
"query": "Quick Fo",
"operator": "and"
}
}
}
}

关于elasticsearch - 如何在Elasticsearch中处理无序多词查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47399956/

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