假设在搜索词中查询“house garden garage”。索引中的文档仅包含“房屋,花园”,“花园,车库”和“房屋车库”,但没有文档包含所有三个单词。
目前,使用split_keyword分析器和运算符“AND”构建查询。所以查询不会返回任何结果。
但如果省略一个搜索词,就会有结果。
是否可以返回仅匹配3个术语的子集的文档并在结果中获取省略的术语?
目前,我看到的唯一方法是以“OR”作为运算符执行查询并启用解释并获取每个字段的单个单词的分数,并找到不匹配的术语。但这似乎非常无意。
答案 0 :(得分:0)
我认为Named Queries在这里会非常有用。您可以在带有_name
param的should子句中编写查询,以找出与例如
{
"query": {
"bool": {
"should": [
{
"match": {
"your_field": {
"query": "house",
"_name" : "house"
}
}
},
{
"match": {
"your_field": {
"query": "garden",
"_name" : "garden"
}
}
},
{
"match": {
"your_field": {
"query": "garage",
"_name" : "garage"
}
}
}
]
}
}
}
在结果中检查matched_queries
字段,它会告诉您哪些字词匹配,然后您就可以找出哪些字词被省略