弹性搜索中的软 must_not
Soft must_not in elastisearch
我试图在 elasticsearch 的文档列表中搜索一个词,同时排除包含该词的表达式。
例如,我想在下面的列表中搜索单词 "good",但以软方式排除表达式 "quite good":
- 这是一个很好的文档。
- 这是一个很好的文档。
- 这是一个很好的文件。确实不错
所以它会 return 1 和 3,因为它有一个 "good" 的实例,它不包含在表达式 "quite good" 中。
我尝试使用 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 的文档列表中搜索一个词,同时排除包含该词的表达式。
例如,我想在下面的列表中搜索单词 "good",但以软方式排除表达式 "quite good":
- 这是一个很好的文档。
- 这是一个很好的文档。
- 这是一个很好的文件。确实不错
所以它会 return 1 和 3,因为它有一个 "good" 的实例,它不包含在表达式 "quite good" 中。 我尝试使用 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
}
}
}
}
}