我正在存储看起来像这样的文档:
{ "title" : "My title", "posted_date" : "2014-03-04T04:00:12+00:00", "category" : ["cat1", "cat2"], }
然后,我用各种侧边栏过滤器显示这些列表,这些过滤器用于分类和日期(按年,按月)。根据用户选择的选项,结果查询可能最终看起来像:
{ "query": { "range": { "posted_date": { "gte": "2014-01-01T00:00:00+00:00", "lte": "2015-01-01T00:00:00+00:00" } }, "filtered": { "filter": { "and": { "filters": [ { "term": { "category": "cat1" } } ] }}}}}
这似乎完全按预期工作,除了当我尝试添加构面时,我可以在日期等旁边加上小数字(1)等:
{ "query": { "range": { "posted_date": { "gte": "2014-01-01T00:00:00+00:00", "lte": "2015-01-01T00:00:00+00:00" } }, "filtered": { "filter": { "and": { "filters": [ { "term": { "category": "fiction" } } ] } } } }, "facets": { "bymonth": { "date_histogram": { "field": "posted_date", "interval": "month" } }, "byyear": { "date_histogram": { "field": "posted_date", "interval": "year" } } } }
仅当我不在查询中包括范围时,此方法才有效。如果范围在那儿,我就不会得到任何回报。只是没有结果。即使我将刻面更改为另一个术语而不是日期,我也一无所获。
范围查询和构面之间是否存在不兼容的问题?关于这些查询的结构方式是否还有其他问题,使其无法按照我认为的方式进行?
我认为您需要在这里facet_filter。
{ "facets": { "facet1": { "terms_stats": { "key_field" : "name", "value_field": "count" }, "facet_filter": { "range": { "filed": { "from": 0, "to": 20 } } } } } }
您更新的查询将如下所示:
{ "query": { "filtered": { "filter": { "and": { "filters": [ { "term": { "category": "fiction" } } ] } } } }, "facets": { "bymonth": { "date_histogram": { "field": "posted_date", "interval": "month" }, "facet_filter": { "range": { "posted_date": { "gte": "2014-01-01T00:00:00+00:00", "lte": "2015-01-01T00:00:00+00:00" } } } }, "byyear": { "date_histogram": { "field": "posted_date", "interval": "year" } } } }