假设搜索项中的查询是“房屋花园车库”。索引中的文档只包含“房子,花园”,“花园,车库”和“房子车库”,但没有文档包含所有这三个词。
目前,查询是使用split_keyword分析器和运算符" and“构建的。所以查询不会返回任何结果。
但是如果省略了一个搜索词,就会有结果。
有没有可能只返回匹配3个术语的子集的文档,并在结果中获得省略的术语?
目前,我看到的唯一方法是使用"OR“作为运算符执行查询,并启用explain,提取每个字段的单个单词的分数,并找到不匹配的术语。但这似乎完全不是故意的。
发布于 2016-09-29 20:40:06
我认为Named Queries在这方面会很有帮助。你可以在带有_name
参数的with子句中编写查询,以找出与之匹配的单词,例如
{
"query": {
"bool": {
"should": [
{
"match": {
"your_field": {
"query": "house",
"_name" : "house"
}
}
},
{
"match": {
"your_field": {
"query": "garden",
"_name" : "garden"
}
}
},
{
"match": {
"your_field": {
"query": "garage",
"_name" : "garage"
}
}
}
]
}
}
}
在results中检查matched_queries
字段,它将告诉您它匹配了哪些词,然后您将能够找出哪些词被省略了
https://stackoverflow.com/questions/39774467
复制相似问题