我试图在elasticsearch中的文档列表中搜索一个单词,同时排除包含该单词的表达式。
例如,我想在下面的列表中搜索单词“good”,但以一种柔和的方式排除表达式“非常好”:
这样它将返回1和3,因为它具有“良好”实例,该实例未包含在表达式“非常良好”中。
我尝试使用BooleanQuery或SpanNotQuery,但每次都排除文档n°3。
另一种方法是使用分析器,该分析器将删除我不想对其进行搜索的表达式。但是,这使我的排除非常静态,无法在查询时设置。
您知道这是否可行以及如何实现?
最佳答案
我最糟糕的是,SpanNotQuery实际上可以解决问题,首先我必须已经对它进行了错误测试。
此查询给出预期的结果:
{
"query": {
"span_not": {
"include": {
"span_term": { "field": "good" }
},
"exclude": {
"span_near": {
"clauses": [
{ "span_term": {"field": "quite" }},
{ "span_term": {"field": "good" }}
],
"slop": 0,
"in_order": true
}
}
}
}
}
关于elasticsearch - Elasticsearch中的软must_not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54928989/