太长了,无法在评论中发布,对于垃圾邮件答案表示歉意:/
我在过滤器中使用它,最小应该匹配来自己处理不相关的单词,而无需弹性搜索(“不相关”单词取决于上下文)。
例如,查找艺术家索引和艺术品索引,并向用户呈现最相关的搜索:
"An artwork blue"
artwork
不是在艺术家索引中搜索的相关词(它会与传记、评论等匹配大量噪音,但毫无意义),除非用户正在寻找名为“Artwork”的艺术家。
我的艺术家索引过滤器看起来(以更复杂的方式)像这样:
{
"query": {
"bool": {
"should": [{
"query": {
"bool": {
"should": [{
"match": {
"name": "An"
}
}, {
"match": {
"biography": "An"
}
}]
},
"minimum_should_match": "100%"
}
},
{
"query": {
"bool": {
"should": [{
"match": {
"name": "artwork"
}
}, {
"match_none": {
}
}]
},
"minimum_should_match": "100%"
}
},
{
"query": {
"bool": {
"should": [{
"match": {
"name": "blue"
}
}, {
"match": {
"biography": "blue"
}
}]
},
"minimum_should_match": "100%"
}
}
],
"minimum_should_match": "100%"
}
}
}
由于它是动态构建的(动态最小应匹配)并且在某些情况下可以排除除传记之外的所有字段,因此我使用 match_none 来保持其“简单”(每个单词应有一个条目)并将艺术家从搜索中排除这显然是一件艺术品。