2013-12-08 3 views
3

ElasticSearch를 사용하여 사용자가 조인 된 태그 문자열로 구성된 텍스트 필드를 검색하도록합니다. 쿼리는 다음과 같습니다 그것은 잘 작동 :ElasticSearch의 쿼리 문자열 퍼지 조회

{ 
    'query' : { 
     'query_string' : { 
      'query' : 'user query with +bool AND operators', 
      'default_operator' : 'AND', 
      'fields' : ['tag_string'], 
      'analyzer' : 'my_analyzer' 
     } 
    } 
} 

그러나, 나는 영국 영어와 미국 철자가 적용되도록 퍼지 매칭을 가능하게하고 싶습니다. 예 : "회색"과 "회색"또는 "색상"과 "색상"에 대해 동일한 결과를 얻고 싶습니다.

퍼지 연산자 "~"를 사용하여 사용자가 수행 할 수 있으므로 "color ~"를 검색하면 "color"와 "color"가 일치합니다. 하지만 자동으로 수행되어야합니다 ... 아직 검색 쿼리에는 bool 연산자가 포함될 수 있으므로 복잡 할 수 있습니다.

답변

2

당신은 퍼지 쿼리 사용할 수 있습니다 :

{ 
    "fuzzy" : { "user" : "ki" } 
} 

을 아니면 match 쿼리에서 fuzziness 요소를 사용합니다. 자신의 예제에서 원하는 것을 얻기위한 또 다른 방법은 동의어를 사용하는 것입니다. 동의어를 사용하면 elasticsearch에게 단어에 동의어를 원래 단어와 함께 저장할 수 있습니다. 회색은 회색 및 회색으로 저장됩니다. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html

+0

감사! 퍼지 요소가 어떻게 작동하는지 조금 더 설명해 주시겠습니까? 그 무거운 요청입니까 아니면 성능이 괜찮습니까? 동의어는 지루할 수 있습니다. 우리가 20 개 언어로 작업하고 있기 때문입니다. –

1

fuzzy 검색의 또 다른 예 (당신이 거를 사용하는 경우) 여러 단어 검색을위한

POST /IndexName/TypeName/_search?size=200 
{ 
    "query": { 
     "fuzzy": { 
     "FieldName": { 
      "value": "gray", 
      "fuzziness": 2, 
      "prefix_length": 1, 
      "boost": 5 
     } 
     } 
    } 
} 

fuzzy_like_this

POST /IndexName/TypeName/_search?size=200 
{ 
    "query": { 
     "fuzzy_like_this": { 
     "fields": ["FieldName1","FieldName2"], 
     "like_text": "user query with +bool AND operators", 
     "max_query_terms": 12, 
     "fuzziness": 0.5 
     } 
    } 
} 
를 사용 : 여기

는 깊이있는 동의어의 설명입니다
관련 문제