我正在尝试使用ElasticSearch。我在查询嵌套对象方面遇到了问题。
我的映射:
curl -X GET http://localhost:9200/testt/resource/_mapping?pretty
{
"resource": {
"properties": {
"bib": {
"type": "nested",
"properties": {
"IssueDate": {
"type": "date",
"format": "dateOptionalTime"
},
"Title": {
"type": "string"
}
}
},
"name": {
"type": "string"
}
}
}
}
我有一个索引资源:
curl -X GET http://localhost:9200/testt/resource/_search?pretty
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.0,
"hits": [
{
"_index": "testt",
"_type": "resource",
"_id": "1234",
"_score": 1.0,
"_source": {
"name": "SSS",
"bib": {
"Title": "XSD",
"IssueDate": "2012-12-19"
}
}
}
]
}
}
curl -X GET http://localhost:9200/testt/resource/1234?pretty
{
"_index": "testt",
"_type": "resource",
"_id": "1234",
"_version": 1,
"exists": true,
"_source": {
"name": "SSS",
"bib": {
"Title": "XSD",
"IssueDate": "2012-12-19"
}
}
}
然而我无法使用查询请求找到它:
{
"query": {
"nested": {
"path": "bib",
"query": {
"query_string": {
"query": "XSD"
}
}
}
}
}
搜索:curl -X GET http://localhost:9200/testt/resource/_search?pretty -d '{ "query" : { "nested" : {"path" : "bib", "query" : { "query_string" : {"query" : "XSD"} } } } }'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 0,
"max_score" : null,
"hits" : [ ]
}
}
我的问题是:如何使用嵌套查询来查找我的对象?我对嵌套对象bib
包含单词XSD
的对象感兴趣。对象1234
显然包含XSD
,但我找不到它。你能告诉我我的查询是否正常?怎么了?
答案 0 :(得分:3)
query_string
不支持它,但如果您可以自己解析查询,则可以使用multi_match
查询并执行以下操作:
{
"query": {
"nested": {
"path": "bib",
"query": {
"multi_match": {
"query": "XSD",
"fields": ["bib.*"]
}
}
}
}
}
此解决方案可能存在的问题是,如果嵌套文档中有任何数字字段,则需要从字段列表中排除它们。可以通过向字段名称添加前缀来实现。例如,您可以将所有字符串字段重命名为以s_
开头,在这种情况下,您可以使用"fields": ["bib.s_*"]
选择所有字符串字段。
另一种可能的解决方案是使用父级的_all
字段。您可以从_all
中排除所有父级字段,并仅对嵌套字段使用_all
。默认情况下,所有嵌套字段都包含在父{Q}个字段中。
答案 1 :(得分:2)
您需要在query_string query中指定默认字段:
curl -XGET localhost:9200/testt/resource/_search -d '{
"query": {
"nested" : {
"path" : "bib",
"score_mode" : "avg",
"query" : {
"query_string" : {
"fields" : ["Title"],
"query" : "XSD"
}
}
}
}
}';