我正在使用 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.html 和 https://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)));
谢谢!
答案 0 :(得分:1)
从您的描述看来,您可能希望使用常规的query string
。
当您查询几个特定字段时。
例如,假设您要搜索常规
动物描述
您的查询如下:
GET /_search
{
"query": {
"query_string" : {
"fields" : ["properties.size", "properties.name", "properties.description"],
"query" : "animal description"
}
}
}
您使用此查询的选项非常广泛,我建议您检出here