我似乎无法理解QueryDSL的elasticsearch方面。以下是我的查询对象以及我的tags数组的映射。我正在尝试将它们放入基于标签的多面导航中。每个“元素”将在标签数组中关联多个标签[并非所有元素都具有标签。一些将有一个空数组。]。每个标签都是具有id和tag属性的对象。
tags
我尝试了嵌套的构面方法,并得到“标签未嵌套”的错误,因此我在下面尝试了此方法。我没有收到错误,但是返回JSON中没有构面对象。我一直在使用此页面寻求帮助:http : //www.elasticsearch.org/guide/reference/api/search/facets/index.html。
谁能帮助我正确设置格式并了解其组织?感谢您的帮助!
// this is my query object { "sort":{ "created_at":{ "order":"desc" } }, "query":{ "constant_score":{ "filter":{ "and":[ { "missing":{ "field":"parent_id" } }, { "missing":{ "field":"wall_id" } }, { "term":{ "active":true } } ] } } }, "facets":{ "tags":{ "terms":{ "field":"tags.tag" } } } } // this is the mapping for the tags array "tags":{ "type":"nested", "include_in_parent":true, "properties":{ "id":{ "type":"integer" }, "tag":{ "type":"string" } } },
我已经尽力复制(使用0.18.5),但是没有任何运气。下面是一些细节。第一个示例尝试复制您描述的内容。第二个不将标签映射为include_in_parent,而是在构面请求中使用“嵌套”字段。如您所见,在两种情况下,都将返回构面。
这使我相信,其余的映射或者某些文档(不是您提供的示例文件)出了问题是导致问题的原因。
当您尝试嵌套方法时,也许您使用的是“嵌套”:“ tags.tag”而不是“嵌套”:“ tags”?
(Un)成功尝试#1:
使用映射创建索引:
$ curl -XPOST 'http://localhost:9200/testindex/' -d '{ "mappings": { "element": { "properties": { "tags": { "type": "nested", "include_in_parent": true, "properties": { "id": { "type": "integer" }, "tag": { "type": "string" } } } } } }
}’
索引文件:
$ curl -XPOST 'http://localhost:9200/testindex/element' -d '{ "element_id": 4682, "parent_id": null, "wall_id": null, "username": "John Doe", "avatar": "56f1bb0a96d02b90e5915ff38ea189ec.jpg", "title": "Easy Chart is a great easy comparison chart maker for math and...", "description": "<p>Easy Chart is a great easy comparison chart maker for math and science skills. It even allows you to pick the appropriate chart type.</p>", "groups": [ { "id": 6, "name": "Fourth Grade (All Subjects)", "name_short": "4th Grade" }, { "id": 17, "name": "Eighth Grade Science", "name_short": "8th Science" }, { "id": 13, "name": "Seventh Grade Science", "name_short": "7th Science" }, { "id": 9, "name": "Sixth Grade Science", "name_short": "6th Science" } ], "tags": [ { "id": 33, "tag": "iPad" }, { "id": 32, "tag": "iPod" } ], "webpages": [], "videos": [], "documents": [], "photos": [], "reports": [], "bookmarks": [], "likes": [], "dislikes": [], "element_type": "Post", "active": true, "deleted": false, "updated_at": "2011-11-27T21:37:38-0600", "created_at": 1322451458000, "created_at_formatted": "2 weeks ago" }'
搜索:
$ curl -XPOST 'http://localhost:9200/testindex/element/_search' -d '{ "sort":{ "created_at":{ "order":"desc" } }, "query":{ "constant_score":{ "filter":{ "and":[ { "missing":{ "field":"parent_id" } }, { "missing":{ "field":"wall_id" } }, { "term":{ "active":true } } ] } } }, "facets":{ "tags":{ "terms":{ "field":"tags.tag" } } } }'
结果:
{ "took": 4, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": null, "hits": [ { "_index": "testindex", "_type": "element", "_id": "RZK41LngTKOhMUS6DXRi7w", "_score": null, "_source": { "element_id": 4682, "parent_id": null, "wall_id": null, "username": "John Doe", "avatar": "56f1bb0a96d02b90e5915ff38ea189ec.jpg", "title": "Easy Chart is a great easy comparison chart maker for math and...", "description": "<p>Easy Chart is a great easy comparison chart maker for math and science skills. It even allows you to pick the appropriate chart type.</p>", "groups": [ { "id": 6, "name": "Fourth Grade (All Subjects)", "name_short": "4th Grade" }, { "id": 17, "name": "Eighth Grade Science", "name_short": "8th Science" }, { "id": 13, "name": "Seventh Grade Science", "name_short": "7th Science" }, { "id": 9, "name": "Sixth Grade Science", "name_short": "6th Science" } ], "tags": [ { "id": 33, "tag": "iPad" }, { "id": 32, "tag": "iPod" } ], "webpages": [], "videos": [], "documents": [], "photos": [], "reports": [], "bookmarks": [], "likes": [], "dislikes": [], "element_type": "Post", "active": true, "deleted": false, "updated_at": "2011-11-27T21:37:38-0600", "created_at": 1322451458000, "created_at_formatted": "2 weeks ago" }, "sort": [ 1322451458000 ] } ] }, "facets": { "tags": { "_type": "terms", "missing": 0, "total": 2, "other": 0, "terms": [ { "term": "ipod", "count": 1 }, { "term": "ipad", "count": 1 } ] } } }
(Un)成功尝试#2:
$ curl -XPOST 'http://localhost:9200/testindex2/' -d '{ "mappings": { "element": { "properties": { "tags": { "type": "nested", "include_in_parent": false, "properties": { "id": { "type": "integer" }, "tag": { "type": "string" } } } } } }
$ curl -XPOST 'http://localhost:9200/testindex2/element' -d '{ "element_id": 4682, "parent_id": null, "wall_id": null, "username": "John Doe", "avatar": "56f1bb0a96d02b90e5915ff38ea189ec.jpg", "title": "Easy Chart is a great easy comparison chart maker for math and...", "description": "<p>Easy Chart is a great easy comparison chart maker for math and science skills. It even allows you to pick the appropriate chart type.</p>", "groups": [ { "id": 6, "name": "Fourth Grade (All Subjects)", "name_short": "4th Grade" }, { "id": 17, "name": "Eighth Grade Science", "name_short": "8th Science" }, { "id": 13, "name": "Seventh Grade Science", "name_short": "7th Science" }, { "id": 9, "name": "Sixth Grade Science", "name_short": "6th Science" } ], "tags": [ { "id": 33, "tag": "iPad" }, { "id": 32, "tag": "iPod" } ], "webpages": [], "videos": [], "documents": [], "photos": [], "reports": [], "bookmarks": [], "likes": [], "dislikes": [], "element_type": "Post", "active": true, "deleted": false, "updated_at": "2011-11-27T21:37:38-0600", "created_at": 1322451458000, "created_at_formatted": "2 weeks ago" }'
$ curl -XPOST 'http://localhost:9200/testindex2/element/_search' -d '{ "sort":{ "created_at":{ "order":"desc" } }, "query":{ "constant_score":{ "filter":{ "and":[ { "missing":{ "field":"parent_id" } }, { "missing":{ "field":"wall_id" } }, { "term":{ "active":true } } ] } } }, "facets":{ "tags":{ "terms":{ "field":"tags.tag" }, "nested":"tags" } } }'
{ "took": 17, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": null, "hits": [ { "_index": "testindex2", "_type": "element", "_id": "_F1TTGJETOipo8kVR7ZXkQ", "_score": null, "_source": { "element_id": 4682, "parent_id": null, "wall_id": null, "username": "John Doe", "avatar": "56f1bb0a96d02b90e5915ff38ea189ec.jpg", "title": "Easy Chart is a great easy comparison chart maker for math and...", "description": "<p>Easy Chart is a great easy comparison chart maker for math and science skills. It even allows you to pick the appropriate chart type.</p>", "groups": [ { "id": 6, "name": "Fourth Grade (All Subjects)", "name_short": "4th Grade" }, { "id": 17, "name": "Eighth Grade Science", "name_short": "8th Science" }, { "id": 13, "name": "Seventh Grade Science", "name_short": "7th Science" }, { "id": 9, "name": "Sixth Grade Science", "name_short": "6th Science" } ], "tags": [ { "id": 33, "tag": "iPad" }, { "id": 32, "tag": "iPod" } ], "webpages": [], "videos": [], "documents": [], "photos": [], "reports": [], "bookmarks": [], "likes": [], "dislikes": [], "element_type": "Post", "active": true, "deleted": false, "updated_at": "2011-11-27T21:37:38-0600", "created_at": 1322451458000, "created_at_formatted": "2 weeks ago" }, "sort": [ 1322451458000 ] } ] }, "facets": { "tags": { "_type": "terms", "missing": 0, "total": 2, "other": 0, "terms": [ { "term": "ipod", "count": 1 }, { "term": "ipad", "count": 1 } ] } } }