2014-12-12 3 views
2

탄성을 찾아 내 항목은 다음과 같다 :"-"대시 그들에 탄성 검색을

입력 :

curl -XPUT "http://localhost:9200/movies/movie/4" -d' 
{ 
    "uid": "a-b" 
}' 

쿼리

curl -XGET "http://localhost:9200/movies/movie/_search" -d ' 
{ 
    "query" : { 
     "term" : { "uid": "a-b" } 
    } 
}' 

출력 :

{"took":2,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}} 

감사합니다.

답변

3

전적으로 사용중인 분석기에 따라 다릅니다.

표준 분석기를 사용하면 두 개의 토큰이 생성되었고 "-"는 무시된다는 것을 알 수 있습니다. 당신이 용어 쿼리를 사용하는 경우

curl -XGET 'localhost:9200/myindex/_analyze?analyzer=whitespace&pretty' -d 'a-b' 
{ 
    "tokens" : [ { 
     "token" : "a-b", 
     "start_offset" : 0, 
     "end_offset" : 3, 
     "type" : "word", 
     "position" : 1 
    } ] 
} 

더 분석이 이루어 없습니다 : "-"데이터로 취급 경우에만 데이터를 저장하기위한 하나의 토큰을 얻을 수있는 공백 분석기와

curl -XGET 'localhost:9200/myindex/_analyze?analyzer=standard&pretty' -d 'a-b' 
{ 
    "tokens" : [ { 
     "token" : "a", 
     "start_offset" : 0, 
     "end_offset" : 1, 
     "type" : "<ALPHANUM>", 
     "position" : 1 
    }, { 
     "token" : "b", 
     "start_offset" : 2, 
     "end_offset" : 3, 
     "type" : "<ALPHANUM>", 
     "position" : 2 
    } ] 
} 

검색어. "a - b"를 "a"와 "b"(즉, 매핑에서 표준 분석기를 사용했다고 가정)과 일치 시키려고합니다. 즉 일치하지 않고 결과를 반환하지 않습니다. 당신이 일치 또는 검색 아마 검색 문자열로 일 것입니다 귀하의 요청에 QUERY_STRING을 사용하는 경우

분석 한 것이다. 즉 ES는 "a"와 "b"가 "a"와 "b"가 포함 된 필드와 일치하도록 시도합니다. 이는 성공적으로 일치합니다.

+1

또는 uid 필드에 not_analyzed를 사용할 수 있습니다. – vierja

관련 문제