应该作为过滤器上下文(或者在Elasticsarch中不计分可能吗?)

时间:2019-03-08 13:58:20

标签: elasticsearch

我正在尝试建立一种最有效的构建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"
                }
            }
        ]
    }
}

1 个答案:

答案 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