弹性搜索中的数组搜索

时间:2016-09-28 16:53:00

标签: java elasticsearch

我有3个文件,

{
"category":[{"id":"1"},{"id":"2"},{"id":"3"}]
}

{
"category":[{"id":"1"},{"id":"4"}]
}
{
"category":[]
}

如何在(2,3)中找到像mysql一样具有category.id的文档, 我还需要在java api querybuilder中使用哪种类型的DSL查询

3 个答案:

答案 0 :(得分:1)

您可以使用带有should子句的bool查询来查找包含所请求的任何ID的所有文档。以下是Query DSL的使用方式

{
    "query": {
        "bool": {
            "should": [
               {"term": {
                  "category.id": {
                     "value": "2"
                  }
               }},
               {"term": {
                  "category.id": {
                     "value": "3"
                  }
               }
               }
            ]
        }
    }
}

以下是使用Java API的方法

QueryBuilders.boolQuery().should(QueryBuilders.matchQuery("category.id", "2"))
                .should(QueryBuilders.matchQuery("category.id", "1"));

如果未分析id字段,您还可以使用术语查询。更多信息https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html

答案 1 :(得分:0)

以下是查询的外观:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "category.id": "1"
          }
        },
        {
          "term": {
            "category.id": "2"
          }
        }
      ]
    }
  }
}

答案 2 :(得分:0)

像这样:

{
   "filter": {
        "terms": {
            "category.id": ["2", "3"]
        }
    }
}