1

내 문서의 모든 feild와 일치 할 수있는 "user"문자열에 대한 전체 텍스트 검색을 수행 한 다음 필터를 적용하여 x feild 값이있는 레코드 만 가져옵니다. "abc"또는 "xyz"중 하나입니다.필터를 통한 전체 텍스트 검색을위한 Elasticsearch java api

다음과 같은 요청이 만족 스럽습니다.

GET _search 
{ 
    "query":{ 
     "filtered":{ 
     "query":{ 
      "query_string": { 
       "query": "user" 
     } 
     }, 
     "filter": 
      [ 

        {"term": { "x": "abc"}}, 
        {"term": { "x": "xyz"}}    
      ]  
     } 
    } 
} 

하지만 자바 API가 위의 작업을 수행하기를 원합니다. 나는 신축성있는 문서를 찾았으나 QueryBuilders.filteredQuery 같은 api가 찾고있는 것을 발견하지 못했다. 현재 2.3.4를 사용하고 있지만 업그레이드 할 수 있습니다.

+0

확인 : https://github.com/searchbox-io/Jest/tree/master/jest – sunkuet02

답변

0

Elasticsearch 2.x java API에는 필터링 된 쿼리가 구현되어 있지 않습니다. elasticsearch 문서에 따르면 그들은 다음과 같이 제안합니다. use the bool query instead with a must clause for the query and a filter clause for the filter.

java에서 필터링 된 쿼리에 대한 래퍼 메서드를 만드는 방법을 만들 수 있습니다.

public static QueryBuilder filteredQuery(QueryBuilder query, QueryBuilder filter){ 
     BoolQueryBuilder filteredQuery = QueryBuilders.boolQuery().must(query); 
     return filteredQuery.filter(filter); 

    } 

,

QueryBuilder query = QueryBuilders.queryStringQuery("user"); 
QueryBuilder filter = QueryBuilders.boolQuery().filter(QueryBuilders.boolQuery().should(QueryBuilders.termsQuery("x", "abc", "xyz"))); 

이 쿼리는 위에서 언급 한 것과 동일합니다 :처럼이 될 것입니다. 도움이 되었기를 바랍니다.

관련 문제