2012-11-21 3 views
0

내가 검색에 "뉴욕"와 일치하는 것을 시도하고있다 (별도 "새로운"또는 "뉴욕"을 포함하지 않는 곳)Elasticsearch - 전체 텍스트 검색

여기에 내 현재 쿼리입니다 :

"query" : {       
    "query_string" : {    
     "query" : "new york" , 
     "fields" : ["city"] 
    } 
}, 
"filter" : { 
    "and" : [{ 
     "query" : {     
      "query_string" : {      
       "query" : "country:US"    
      }    
     } 
    }] 
}    

가 그러나 이것은 "뉴욕"이 아닌 "york"이라는 이름의 장소를 계속해서 반환합니다.

나는 이것이 어떻게 작동하는지 완전히 이해하지 못하고 실제로이 문제를 해결하는데 도움이 될 것입니다.

"query" : {       
    "query_string" : {    
     "query" : "new york" , 
     "fields" : ["city"], 
     "default_operator" : "AND" 
    } 
} 

를하거나 쿼리 이온 지정 :

"query" : {       
    "query_string" : {    
     "query" : "new AND york" , 
     "fields" : ["city"] 
    } 
} 

이보고에서 되세요 당신이 두 단어가 같은 문서에 표시 할 경우

+0

나는 elasticsearch를 모르지만, "new york"의 공간은 부울 또는 연산자로 사용됩니다. ''\ "new york \" "'시도해보십시오. –

+0

회신 해 주셔서 감사합니다. 회신 할 때 작동하지 않는 것 같습니다. –

답변

3

는이 같은 기본 연산자를 변경해야 query string. 않는 Elasticsearch에 의해 "분석"에서 기본적으로

"query" : { 
    "match_phrase" : { 
     "message" : "new york" 
    } 
} 
0

도시 필드 : 당신이 두 단어는 같은 문서에서 서로 가까이 표시하려면

그렇지 않으면, 당신은 이런 phrase query을해야 단어의 기본 토큰 화

, 명시 적으로 도시 필드가 "분석되지"확인해야합니다 (주로 집계에 사용) 그대로 토큰을 유지하기 위해
New York => *New*, *York* 

이제 당신이 얻을 수 city.raw을 사용할 수있는 멀티 필드

'city' => [ 
      'type' => 'string', 
      'fields' => [ 
      'raw' => [ 
       'type' => 'string', 
       'index' => 'not_analyzed' 
       ] 
      ] 
     ] 

를 사용하여 분석되지 않은 값.