2017-03-14 2 views
0

와일드 카드 문자로 결과를 필터링하려고합니다. 내 기록의와일드 카드로 ElasticSearch 필터

예 : 각 개정 다른 순서와 다른 컨텍스트를 가질 수

.... 
"_source" : { 
     "urlSlug" : "entry-title", 
     "revisions" : [ 
     { 
      "title" : "Entry title", 
      "context" : "NKD" 
     } 
     ] 
} 

.

레코드를 검색 할 때 "N"과 같은 컨텍스트가있는 엔티티 만 검색하려고합니다. 그래서 match_all과 와일드 카드로 중첩 된 쿼리를 수행합니다.

쿼리를 실행할 때 결과가 0입니다. 결과를 제한하는 방법을 알 수 없습니다.

indexes: 
     app: 
      types: 
       entity: 
       properties: 
        urlSlug: ~ 
        revisions: 
         type: "nested" 
         properties: 
         title: { type: text,boost: 10 } 
         context: { type: text } 

을 내 쿼리 빌더는 다음과 같습니다 :

나는 다음과 같은 설정으로이 FosElastica을 위해 사용하고

$boolQuery = new ESQuery\BoolQuery(); 

    $fieldQuery = new ESQuery\QueryString(); 
    $fieldQuery->setQuery('*' . $query . '*'); 
    $boolQuery->addMust($fieldQuery); 

     $nestedQuery = new ESQuery\Nested(); 
     $nestedQuery->setPath('revisions'); 

      $nestedBoolQuery = new ESQuery\BoolQuery(); 
       $matchAllQuery = new ESQuery\MatchAll(); 
      $nestedBoolQuery->addShould($matchAllQuery); 

       $filterQuery = new ESQuery\Wildcard(); 
       $filterQuery->setValue('revisions.context','*N*'); 
      $nestedBoolQuery->addFilter($filterQuery); 

     $nestedQuery->setQuery($nestedBoolQuery); 


    $boolQuery->addMust($nestedQuery); 

$result = $finder->findHybrid($boolQuery,self::AUTOCOMPLETE_MAX_RESULTS); 

ElasticSearch 버전 5.2.2

답변

0

그럼 난 찾았어요 내 쿼리의 문제점은 무엇입니까?

하나를 작동 :

{"query":{"bool":{"must":[{"query_string":{"query":"*komi*"}}],"filter":[{"nested":{"path":"revisions","query":{"wildcard":{"revisions.context":{"value":"*n*","boost":1}}}}}]}},"size":10} 

전체 문제는 대문자 와일드 카드 검색했다. *N*을 찾고 제로 결과가 있고 *n*로 잘되었습니다.