我正在尝试在elasticsearch中的文档列表中搜索一个单词,同时排除包含该单词的表达式。
例如,我想在下面的列表中搜索单词“ good”,但以柔和的方式排除“非常好”一词:
因为它有一个“好”的实例,该实例没有包含在表达式“非常好”中,所以它将返回1和3。 我尝试使用BooleanQuery或SpanNotQuery,但每次都排除文档n°3。
另一种方法是使用分析器,该分析器将删除我不想对其进行搜索的表达式。但是,这使我的排除非常静态,无法在查询时设置。
您知道这是否可行以及如何实现?
答案 0 :(得分:1)
糟糕的是,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
}
}
}
}
}