如何使用Elasticsearch Java API执行以下查询?

时间:2015-12-27 21:51:45

标签: java elasticsearch

我正在使用spring data elasticsearch,我希望能够在“fruit”类型的索引“fruits”上执行以下搜索查询:

{
   'sort': {'fruitid': 'desc'}, 
   'query': {
      'query_string': {
         'query': u'Banana AND (start:>=1492274000000) AND (end:<=1386842400000)'
      }
   }, 
   'facets': {
      'fruit_color': {
          'terms': {'field': 'fruit_color', 'size': 5}
      }, 
      'fruit_weight': {
          'terms': {'field': 'fruit_weight', 'size': 5}
      }
}

如何使用Java API执行此操作?注意我不想使用任何模型类。

1 个答案:

答案 0 :(得分:0)

下面的Java代码向您展示了如何为水果颜色和重量创建两个TermFacetRequest以及如何通过调用withFacet()将它们添加到查询中。它还会向您展示如何使用query_string方法调用添加QueryBuilders.queryStringQuery()查询。

// create the fruit color facet
TermFacetRequest fruitColor = new TermFacetRequest("fruit_color");
fruitColor.setFields("fruit_color");
fruitColor.setSize(5);

// create the fruit weight facet
TermFacetRequest fruitWeight = new TermFacetRequest("fruit_weight");
fruitWeight.setFields("fruit_weight");
fruitWeight.setSize(5);

SearchQuery searchQuery = new NativeSearchQueryBuilder()
    .withPageable(new PageRequest(0, 10))
    .withQuery(QueryBuilders.queryStringQuery("Banana AND (start:>=1492274000000) AND (end:<=1386842400000)"))                
    .withSort(SortBuilders.fieldSort("fruitId").order(SortOrder.DESC))                
    .withIndices("fruit").withTypes("fruit")
    .withFacet(fruitColor)            <--- add the fruit color facet
    .withFacet(fruitWeight);          <--- add the fruit weight facet