Elasticsearch Java API или фильтр

Мне нужно применить фильтр «ИЛИ», который будет эквивалентен категории в («a» или «b» или «c» или «d» или «e») эквивалентный запрос ES приведен ниже

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

У меня есть приведенный ниже код API JAVA ES, и я поражен добавлением фильтра ИЛИ в Java. Может кто-нибудь помочь, пожалуйста?

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

person Adithya Kumar    schedule 01.04.2016    source источник


Ответы (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" ))
person Michael Stockerl    schedule 01.04.2016
comment
Большое спасибо, Михаил! - person Adithya Kumar; 02.04.2016