【问题标题】:elasticsearch seach query by a chain orderelasticsearch 链式搜索查询
【发布时间】:2020-09-11 07:42:21
【问题描述】:

我有多个查询,我希望按查询顺序过滤结果。

例如,我想从查询 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("match", group="1")

query2 = Q("match", category="fruit")

query3 = Q("match", document="search")

我想要的只是结果中的文档 1。

似乎bool函数会给每个查询赋予相等的权重,例如它会给query3完全匹配的结果,query1没有完全匹配或相关性低,这不是query3 ⊆ query2 ⊆的顺序查询1。

这是我的代码:

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

        }

        }
    )

它们的工作方式与我想的不一样,请帮我解决这个问题。

谢谢。

【问题讨论】:

  • 最好以 JSON 格式提供您的索引映射、示例文档和预期文档,以便其他 SO 用户可以轻松重现问题并为您提供帮助。

标签: elasticsearch


【解决方案1】:

我不确定你真正想要什么。 如果我理解得很好,您可能可以使用“过滤器”而不是必须的。

更新后。像这样的查询应该适用于您的示例。

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

【讨论】:

  • 我尝试了过滤器,但它没有给我正确的结果。我的 query3 没有从 query1 搜索。
  • 我需要更多信息。您能否提供您想要和不想了解您需求的微妙性的数据和结果示例
  • 感谢您的回复,我编辑了我的问题,请看一下。
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 2015-03-08
  • 1970-01-01
  • 2017-06-23
相关资源
最近更新 更多