一尘不染

需要同时使用$ select和$ filter实施elasticsearch查询

elasticsearch

我有一个 Odata 查询: /ecommerceadmin/ODataService.svc/search?$select=status
&$filter=id eq'test.com‘和名称eq’abc’

如何在elasticsearch中实现代码以相应地获取数据。应使用 SearchSourceBuilder 中的 哪种 方法?


阅读 286

收藏
2020-06-22

共1个答案

一尘不染

您可以轻松地摆脱一个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部分
2020-06-22