具有多个字段的 Elasticsearch 查询?

时间:2021-05-25 19:53:41

标签: elasticsearch

我是 Elasticsearch 的新手。我想按多个文件过滤

我有一些数据:

{
    "_index": "app",
    "_type": "test",
    "_id": "2121",
    "_score": 1,
    "_source": {
      "id": 2121,
      "name": "Toto",
      "category": {
         "id": 5
      },
      "state": {
         "id": 44
      },
      "stage": {
         "id": 6
      },
      "userAccepted": [ ],
      "userReferred": {
         "id": 1
      }
   }
}

如何按名称、类别和状态进行过滤?

我尝试了很多解决方案,但它不起作用:

  {
  "query": {
    "query_string": {
      "query": "name:Toto AND state.id:44 AND category.id:5"
    }
  }
}

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "default_field": "category.id",
            "query": "5"
          }
        },
        {
          "query_string": {
            "default_field": "name",
            "query": "test"
          }
        }
      ]
    }
  }
}

看看上面的查询,看看是否有帮助谢谢

1 个答案:

答案 0 :(得分:0)

您的 Elasticsearch 版本是什么?我在 v7.2 上测试了您的第一次查询尝试,它正确返回了您的示例文档。

如果您要进行复合 must 查询,我建议您使用 match 查询。例如,

{
  "query": {
    "bool": {
      "must": [
        {
          "match": { "name": "Toto" }
        },
        {
          "match": { "state.id": "44" }
        },
        {
          "match": { "category.id": "5" }
        }
      ]
    }
  }
}