-1

次のエラスティック検索クエリがあります

SearchResponse response = DbContext.INSTANCE.client()
            .prepareSearch(indexList)
            .setTypes("docs")
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)             
            .setQuery(queryBuilder)             
            .setFilter(FilterBuilders.andFilter(f1, f2))
            .addFacet(FacetBuilders.termsFacet("f").field("frm").size(10))
            .setFrom(pageNumber).setSize(size).execute().actionGet();

このクエリによって返されるファセット カウントはグローバルですが、検索応答のファセットを取得するにはどうすればよいですか?


私は答えを見つけました:私がしたことは、メインクエリにフィルターを追加することです

QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.queryString(criterion.getFullText()).field("text"))
.must(QueryBuilders.termsQuery("from", criterion.getFrom().toArray((new String[0]))))
.must(QueryBuilders.termsQuery("to", criterion.getTo().toArray((new String[0]))))
.must(QueryBuilders.rangeQuery("date").from(dtf.print(criterion.getFromDate())).to(dtf.print(criterion.getToDate())));

SearchResponse response = 
DbContext.INSTANCE.client()
.prepareSearch(indexList)
.setTypes("docs")
.setQuery(queryBuilder)
.addFacet(fb)
.addFacet(tf)
.addSort("date", SortOrder.DESC)
.setFrom(pageNumber).setSize(size).execute().actionGet();
4

1 に答える 1

1

これは、「メイン」検索が必要で、ファセットに別の検索要件がない限り、私が行ったことです。 global=falseあなたのためにトリックをするべきです

"facets": {
  "volume_by_day": {
    "date_histogram": {
      "field": "crdate",
      "interval": "day"
    },
    "global": "false"
  }
}
于 2014-03-13T11:39:25.590 に答える