2016-04-01 15 views
0

同等のESクエリである「a」または「b」または「c」または「d」または「e」のカテゴリに相当する「OR」フィルタを適用する必要があります以下に提供されますElasticsearch java api or filter

"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); 

答えて

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")) 
) 

をしかし、あなたはまた、terms filterを使用することができます。

QueryBuilders.filteredQuery(
    QueryBuilders.rangeQuery("@timestamp").from(fromHr).to(toHr), 
    FilterBuilders.termsFilter("category", "a", "b", "c", "d", "e", "f")) 
+0

はそんなにマイケルありがとうございます! –

関連する問題