需要使用$ select和$ filter实现弹性搜索查询

时间:2016-06-28 12:22:21

标签: java elasticsearch odata filtering

我有一个Odata查询: /ecommerceadmin/ODataService.svc/search?$select=status&$filter=id eq'test.com'and name eq'abc'

如何在弹性搜索中实现代码以相应地获取数据。应该使用 SearchSourceBuilder 中的哪些方法?

1 个答案:

答案 0 :(得分:0)

您可以轻松地通过一个match和一个term查询来解决这个问题:

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilders.*;

BoolQueryBuilder query = QueryBuilders.boolQuery()
    .must(QueryBuilders.matchQuery("name", "abc"))       // 1.
    .filter(QueryBuilders.termQuery("id", "test.com"));  // 2.

SearchResponse response = client.prepareSearch("ecommerce_index")
        .setTypes("ecommerce_type")
        .setQuery(query)
        .setFetchSource(new String[]{"status"}, null)    // 3.
        .setFrom(0)
        .setSize(10)
        .execute()
        .actionGet();

在上面的代码中:

  1. 负责name eq 'abc' $ filter
  2. 负责id eq 'test.com' $ filter
  3. 负责$select=status部分