2014-02-28 2 views
0

elasticsearch 쿼리를 필터링하여 값이 "no"인 항목을 찾을 수 없습니다. 나는 버전 0.90을 사용하고있다. bar에 대한 몇 가지 용어 쿼리를 시도, 지금값이 "no"인 필드의 필터

{ "foo": "abc", "bar": "yes" } 
{ "foo": "def", "bar": "no" } 
{ "foo": "ghi", "bar": "maybe" } 

: 나는 "의 값으로 쿼리 할 때

{ "query": { "term": { "bar": "yes" } } } 
// Hits: 1 

{ "query": { "term": { "bar": "maybe" } } } 
// Hits: 1 

{ "query": { "term": { "bar": "no" } } } 
// Hits: 0         <-- What?? 

상관 없음 안타를이 없습니다

다음 항목에 인덱스를 작성 ". 패싯에서

봐 :

{ "facets": { "bar": { "terms": { "field": "bar" } } } } 

결과 :조차하지 않는면이 "아니오"값을 반환있다

{ 
    ... 
    "facets": { 
     "bar": { 
     "_type": "terms", 
     "missing": 1, 
     "total": 2, 
     "other": 0, 
     "terms": [ 
      { "term": "yes", "count": 1 }, 
      { "term": "maybe", "count": 1 } 
     ] 
     } 
    } 
} 

. 무슨 일 이니? 값이 "no"인 색인에서 항목을 찾으려면 어떻게합니까?

방금 ​​최신 버전 (1.0.1)을 다운로드했으며이 문제가 해결되었음을 알 수 있습니다. 그러나 나는 0.90.3에 있고 행동은 0.90.12에서 동일합니다. 0.90에서 작동하도록하는 방법이 있습니까? *?

답변

1

이것은 0.90의 표준 분석기를 사용하여 예상되는 동작입니다. 표준 분석기는 문자열을 색인 할 때 기본적으로 사용되며 stop word token filter을 적용합니다. 중지 단어 목록에 "아니오"가 표시되므로 색인 된 용어 목록에서 제거됩니다. 따라서 "아니오"를 검색하면 아무 것도 반환하지 않습니다.

이 동작이 1.0에서 다른 이유는 중지 단어의 이점이 의문을 제기하고 기본 동작에서 제거 되었기 때문입니다. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_stopwords.html

동일한 동작을보고 싶다면 직접 분석기를 만들거나 대신 키워드 분석기를 사용할 수 있습니다. 이렇게하면 문자열을 소문자로 변환하고 분할하지 않고 단어에 스톱 워드 필터를 적용하지 않습니다. http://www.elasticsearch.org/blog/stop-stopping-stop-words-a-look-at-common-terms-query/ 여기에 또 다른 유래 질문 : elasticsearch: how to index terms which are stopwords only?

여기에 주제에 대한 좋은 블로그 게시물이있다

관련 문제