2015-01-30 4 views
4

탄성 검색을 사용하는 와일드 카드 쿼리에 복잡한 필터를 추가하려고합니다. 필터가 작동하고있는 것 같지만 결과는 와일드 카드를 고려하지 않습니다. 이것이 가능합니까 아니면 와일드 카드 필터에 대한 대안이 있습니까?Elastic Search에서 와일드 카드 검색 필터링

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "wildcard": { 
      "name": "*frog*" 
     }, 
     "filter": { 
      "bool": { 
      "must": { 
       "term": { 
       "is_animal": false 
       } 
      } 
      }, 
      "or": [ 
      { 
       "terms": { 
       "reptiles.codes": [ 
        27 
       ] 
       } 
      }, 
      { 
       "nested": { 
       "path": "owners", 
       "query": { 
        "bool": { 
        "should": { 
         "term": { 
         "pets": "cat" 
         } 
        } 
        } 
       } 
       } 
      }, 
      { 
       "nested": { 
       "path": "locations", 
       "query": { 
        "bool": { 
        "should": { 
         "term": { 
         "home": true 
         } 
        } 
        } 
       } 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 

을 대안으로 내 "부울"내부 필터로 와일드 카드를 추가 할 수 있습니다 : 다음과 같이 쿼리는 { "해야"....}}?

+1

개구리가 동물이기 때문에 값 is_animal이 false로 트리거됩니다. 너의 쟁점이 될 수있는 기회? 어쩌면 wildcart 쿼리를 match_all 쿼리로 대체하고 문서가 있는지 확인하십시오. –

+0

사실, 개구리는 파충류입니다. – user3241997

+0

나는 당신의 접근법을 사용하여 시도했고 그것은 0 히트를 받았습니다. http://stackoverflow.com/questions/35586116/elasticsearch-filter-does-not-work-with-wildcard- 나를 위해 – AbtPst

답변

1

정말 느린 와일드 카드를 실행하는 대신 분석기에서 반드시 ngram 토큰 필터를 사용해야합니다. 특히 별이 여기에 해당하는 경우 시작하십시오.

그런데 왜 와일드 카드 부분이 여기에 적용되지 않는지 이해할 수 없습니다. 전체 사례를 통해 사례를 재현 할 수있는 기회가 있습니까? 특정 분석기를 가지고 있습니까?