一尘不染

远程查询未返回的Elasticsearch构面

elasticsearch

我正在存储看起来像这样的文档:

{
   "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"
      }
    }
  }
}

仅当我不在查询中包括范围时,此方法才有效。如果范围在那儿,我就不会得到任何回报。只是没有结果。即使我将刻面更改为另一个术语而不是日期,我也一无所获。

范围查询和构面之间是否存在不兼容的问题?关于这些查询的结构方式是否还有其他问题,使其无法按照我认为的方式进行?


阅读 232

收藏
2020-06-22

共1个答案

一尘不染

我认为您需要在这里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"
         }
      }
   }
}
2020-06-22