【发布时间】:2020-10-09 21:32:05
【问题描述】:
我一直在尝试将 lucene 样式查询转换为 ES 查询语法,但我遇到了子条款。例如
(title:history^10 or series:history) and (NOT(language:eng) OR language:eng^5) and (isfree eq 'true' OR (isfree eq 'false' AND owned eq 'abc^5'))
这表明“给我一个匹配'title'或'series'中的历史,但提升标题匹配并且语言不必是英语,但如果是那么提升它并且匹配在哪里免费或不是免费的,请确保它归客户 abc 所有。
我觉得这是一个棘手的查询,但它似乎可以正常工作。将子句转换为 ES 语法让我感到困惑,因为我并没有括号的概念。我想我需要使用布尔查询......我有以下我知道不能正确应用标准的内容 - 它说你应该有(语言:eng OR isFree eq 'true' ORowned:abc)。我似乎无法做出精神上的飞跃来构建包含 NOT 的必须/应该。
请帮忙?
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "history",
"fields": [
"title^10.0",
"series"
]
}
}
],
"should": [
{
"term": {
"language": {
"value": "eng",
"boost": 5
}
}
},
{
"term": {
"isFree": {
"value": true
}
}
},
{
"term": {
"owned": {
"value": "abc",
"boost": 5
}
}
}
]
}
},
【问题讨论】:
标签: elasticsearch lucene elasticsearch-dsl elasticsearch-query