基于链式订单的ElasticSearch查询

9lowa7mx  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(1)|浏览(334)

我有多个查询,我希望结果按查询顺序过滤。
例如,我希望从查询1结果中搜索查询2,从查询2结果中搜索查询3。查询3的结果不应超过查询1的结果。
查询3⊆ 查询2⊆ 查询1

| id       | document                       |  category  |  group |
| -------- | -----                          |  ---       |  ---   |
| 1        | I want better search           |  fruit     |  1     |
| 2        | I want to watch search movie   |  fruit     |  2     |
| 3        | search movie                   |  animal    |  1     |

query1=q(“匹配”,group=“1”)
query2=q(“匹配”,category=“水果”)
query3=q(“匹配”,document=“搜索”)
我想要的只是结果中的文档1。
bool函数似乎会为每个查询赋予相等的权重,例如,它将给出与query3完全匹配的结果,query1没有完全匹配或相关性低,这与query3的顺序不同⊆ 查询2⊆ 查询1。
这是我的密码:

resp = es.search(index='test-vector-index', body={
        "query" : {      
            "bool": {
                "must": [
                { "match" : { "group" : "1" }},
                { "match": { "category": "fruit" } },
                { "match": { "document": "search" } },
          ]
        }

        }

        }
    )

他们不像我想的那样工作,请帮我解决这个问题。
谢谢您。

vd2z7a6w

vd2z7a6w1#

我不知道你到底想要什么。如果我理解的很好,你可能可以用“过滤器”而不是必须的。
更新之后。这样的查询应该适用于您的示例。

GET /_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {
          "document": "search"
        }}
      ], 
      "filter": [
        {
          "term": {
            "category.keyword": "fruit"
          }
        },
        {
          "term": {
            "group": 1
          }
        }

      ]
    }
  }
}

相关问题