在多/全部elasticsearch嵌套字段中动态搜索

时间:2018-09-13 08:58:37

标签: elasticsearch nested spring-data spring-data-elasticsearch

我正在使用 spring-data-elasticsearch 2.0.8 ,而elasticsearch.2.2.0想动态搜索嵌套对象。

基本上,我的嵌套对象可以有几个嵌套字段,但是我想动态搜索所有这些字段。例如,一个动物文档可以有3个描述他的字段:名称/大小/说明。

我想搜索所有这些内容,因为我的搜索终点只有一个“说明”自由文本选项。因此,当用户在其入口点键入“ 15”或“ dog”时,搜索将检查“名称”,“大小”和“描述”字段,并从中返回内容。

我的映射如下:

{
    "mappings": {
        "animal_doc": {
            "properties": {
                "animal_description": {
                    "type": "nested",
                    "include_in_parent": true,
                    "properties": {
                        "name": {
                            "type": "string"
                        },
                        "size": {
                            "type": "string"
                        },
                        "description": {
                            "type": "string"
                        }
                    }
                },
           }
      }
  }

我都读过: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-nested-query.htmlhttps://www.elastic.co/blog/managing-relations-inside-elasticsearch

这可以通过使用(spring-data-es)创建查询来解决:

boolQuery.must(QueryBuilders.nestedQuery("animal_description", 
addMatchQuery("animal_description."+field, value)));

因此,每次我查询Object.nestedField:value 但是我不想每次都指定该字段,而是希望它是动态的-在嵌套的“ animal_description”字段内-也将搜索所有内部字段。

所需的解决方案如下:

boolQuery.must(QueryBuilders.nestedQueryGetAllFields("animal_description",value)));

谢谢!

1 个答案:

答案 0 :(得分:1)

从您的描述看来,您可能希望使用常规的query string。 当您查询几个特定字段时。 例如,假设您要搜索常规

  

动物描述

您的查询如下:

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["properties.size", "properties.name", "properties.description"],
            "query" : "animal description"
        }
    }
}

您使用此查询的选项非常广泛,我建议您检出here