在Elasticsearch的一次搜索中进行多个加权布尔查询

时间:2019-03-24 18:29:38

标签: python elasticsearch

我想一次搜索包含多个加权布尔查询。

用例如下:

Query 1 AND Query 2 --> Weight 3.0
Query 1 OR Query 2 --> Weight 2.0

然后我希望此搜索仅输出一个结果,因此将这两个搜索合并为一个排名结果。

当前,我有这样的事情(由于最初有5个“大案例”,我省略了一些案例以使其变得更简单)

payload={
      "size": 1000,
      "query": {
        "bool": {
          "should": [{
            "bool": {
              "must": [{
                  "bool": {
                    "should": [An array of query_string objects]
                  }
                },
                {
                  "bool": {
                    "should": [An array of query_string objects]
                  }
                },
                {
                  "bool": {
                    "should": [An array of query_string objects]
                  }
                }
              ],
              "boost": 9.0
            },
              "bool": {
              "should": [{
                  "bool": {
                    "should": [An array of query_string objects]
                  }
                },
                {
                  "bool": {
                    "should": [An array of query_string objects]
                  }
                },
                {
                  "bool": {
                    "should": [An array of query_string objects]
                  }
                }
              ],
              "boost": 4.5
            }
          }]
        }
      }
    }

外部的第一个查询应为AND-AND,第二个查询为OR-OR。

但是我确实注意到,如果我将boost 9.0查询与boost 4.5查询交换,我的结果会改变。这使我认为这样做的方式有问题,可能只考虑了最后一个查询?

有人可以告诉我如何以适当的方式做到这一点,如果可能的话?谢谢!


编辑:

[An array of query_string objects]的示例是:

diseaseQueries = []
for q in diseasesDict[topic.topicNumber]:
    diseaseQueries.append({
      "query_string": {
        "query": q,
        "fields": [
          "title",
          "abstract"
        ]
      }
    })

0 个答案:

没有答案