我想一次搜索包含多个加权布尔查询。
用例如下:
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"
]
}
})