我正在尝试建立一种最有效的构建OR的方法,而无需计分,因为我想随后按业务价值对结果进行排序。
不幸的是,我没有完成它。 :(
我需要的:
COLOR=X AND ( title = Y OR description = Z)
我尝试过的操作(但格式不正确):
{
"query": {
"bool": {
"filter": [
{
"term": {
"colors.source_name": "braun"
}
},
{
"should": [
{
"term": {
"title": "sofa"
}
},
{
"term": {
"description": "sofa"
}
}
]
}
]
}
}
我也尝试过,但是它也提供了没有“ gartenlounge”的结果,尤其是在得分方面:
{
"query": {
"bool": {
"filter": [
{
"term": {
"colors.source_name": "braun"
}
}
],
"should": [
{
"term": {
"title": "sofa"
}
},
{
"term": {
"description": "sofa"
}
}
]
}
}
答案 0 :(得分:4)
以下查询将为您工作:
{
"query": {
"bool": {
"filter": [
{"term": {
"colors.source_name": "braun"
}},
{"bool": {
"should": [
{"term": {"title": "sofa"}},
{"term": {"description": "sofa"}}
]
}}
]
}
}
}
您可以在bool
上下文中嵌套filter
查询,并且should
仅在bool
子句中有效。
这是一个古老的参考先生,但它仍然签出:
https://www.elastic.co/guide/en/elasticsearch/guide/current/combining-filters.html