0

「OR」フィルターを適用する必要があります。これは、('a' または 'b' または 'c' または 'd' または 'e') のカテゴリと同等です。同等の ES クエリを以下に示します。

"query_string": {
                      "query": "category: (\"a\", \"b\", \"c\", \"d\", \"e\")"
                   }

私はこれを以下に述べたJAVA ES APIコードを持っており、JavaでORフィルターを追加することに感銘を受けました。誰か助けてくれませんか?

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder()
     searchSourceBuilder.query(QueryBuilders.boolQuery()
                .must(QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
                        FilterBuilders.termFilter("category","a")))
                .must(QueryBuilders.rangeQuery("@timestamp").from(fromHr).to(toHr)))
                .fields(fieldList);
4

1 に答える 1

1

あなたの例に基づいて、ES 1.x を使用していると仮定し、RangeQuery はクエリである必要があると想定します。私があなたの質問を正しく理解していれば、次のようなことをしたいでしょう:

QueryBuilders.filteredQuery(
 QueryBuilders.rangeQuery("@timestamp").from(fromHr).to(toHr),
 FilterBuilders.boolFilter()
  .should(FilterBuilders.termFilter("category","a"))
  .should(FilterBuilders.termFilter("category","b")) 
  .should(FilterBuilders.termFilter("category","c")) 
  .should(FilterBuilders.termFilter("category","d"))   
  .should(FilterBuilders.termFilter("category","e"))
)

ただし、フィルターという用語も使用できます。

QueryBuilders.filteredQuery(
  QueryBuilders.rangeQuery("@timestamp").from(fromHr).to(toHr),
  FilterBuilders.termsFilter("category", "a", "b", "c", "d", "e", "f" ))
于 2016-04-01T19:37:07.810 に答える