代码之家  ›  专栏  ›  技术社区  ›  riorio

如何在ReloSkyCH和Java中进行查询和查询

  •  1
  • riorio  · 技术社区  · 7 年前

    我尝试在SQL中执行与以下内容等效的弹性:

    select * from Pets 
    where type is 'cat'
    and age > 10
    and name in ("Barry", "Oscar", .....)  
    

    我有以下Java代码:

    SearchRequest searchRequest = new SearchRequest(elasticIndexName);
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    queryBuilder.must(QueryBuilders.termQuery("type", "cat"));
    queryBuilder.must(QueryBuilders.rangeQuery("age").from("10"));
    queryBuilder.must(QueryBuilders.termQuery("name", "Oscar"));
    queryBuilder.must(QueryBuilders.termQuery("name", "Barry"));
    

    但是,如果我理解正确的话,最后两个“必须”语句是相互矛盾的。 我试着用“应该”这个词,但它似乎带来了所有猫的名字。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Val    7 年前

    terms 查询):

    SearchRequest searchRequest = new SearchRequest(elasticIndexName);
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    queryBuilder.must(QueryBuilders.termQuery("type", "cat"));
    queryBuilder.must(QueryBuilders.rangeQuery("age").from("10"));
    queryBuilder.must(QueryBuilders.termsQuery("name", "Oscar", "Barry"));
    
        2
  •  0
  •   Devratna    7 年前

    BoolQueryBuilder boolQueryBuilder = boolQuery();
    boolQueryBuilder.must(QueryBuilders.matchQuery("type", cat));
    boolQueryBuilder.must(QueryBuilders.rangeQuery("age").gt(10));
    boolQueryBuilder.must(QueryBuilders.multiMatchQuery(String.join(" ", Arrays.asList("Barry", "Oscar"), name).type(Type.BEST_FIELDS));