2012-10-16 3 views
0

edgengram 쿼리가 제대로 작동하는 데 문제가 있습니다. 나는 적어도 2 개의 edgengram을 가진 "푸른 잔디"라는 기록을 가지고있다. 그러나 "blv"의 질의 문자열은 "푸른 잔디"를 반환하지만, 그렇지 않아야한다.쿼리 문자열 반환 결과가 edgeNGram에 없습니다.

curl -X POST http://localhost:9200/test -d '{ 
    "mappings": { 
     "product/fragrance": { 
      "properties": { 
       "name_query": { 
        "index_analyzer": "query_index_analyzer", 
        "search_anaylzer": "query_search_analyzer", 
        "as": {}, 
        "type": "string" 
       } 
      } 
     } 
    }, 
    "settings": { 
     "analysis": { 
      "filter": { 
       "query_edgengram": { 
        "type": "edgeNGram", 
        "min_gram": 2, 
        "max_gram": 20, 
        "side": "front" 
       } 
      }, 
      "analyzer": { 
       "query_index_analyzer": { 
        "tokenizer": "lowercase", 
        "filter": ["asciifolding", "query_edgengram"] 
       }, 
       "query_search_analyzer": { 
        "tokenizer": "lowercase", 
        "filter": ["asciifolding"] 
       } 
      } 
     } 
    } 
}' 

curl -X POST "http://localhost:9200/test/product%2Ffragrance/1" -d '{ 
    "name_query": "blue grass" 
}' 

curl -X GET "http://localhost:9200/test/product%2Ffragrance/_search?load=true&pretty=true" -d '{ 
    "query": { 
     "bool": { 
      "must": [{ 
       "query_string": { 
        "query": "blv", 
        "fields": ["name_query"], 
        "default_operator": "OR" 
       } 
      }] 
     } 
    } 
}' 

나는 그 결과를 얻습니다. 왜 그 이유를 설명 할 수 있습니까? 감사. 내가 원하는 것은 "bl"은 "푸른 잔디"를 돌려 보내면 안된다는 것입니다. 나는 분석 API를 사용하여 "푸른 잔디"가 "bl", "블루", "블루", "gr", "gra", "gras", "grass"로 분류되었지만 "blv" 그 중 어느 것과도 일치하지 않습니다.

답변

2

데이비드가 대답 한대로 elasticsearch 쿼리를 분석했습니다. 대개 ngram을 쿼리에 적용하고 싶지는 않지만 매핑이 주어지면 이미 알고있는 것처럼 보입니다. 실제로 ngram이없는 검색 분석기가 고려되지 않은 이유는 대신에 search_anaylzer입니다. 따라서 검색어가 blblv이되고 bl이 반환 된 문서와 일치하는 것입니다.

+0

오, 이런, 얼마나 당황 스럽습니까. 고마워요/블러쉬 – axsuul

1

MatchQuery 또는 QueryString을 사용하여 무언가를 검색 할 때 동일한 분석기가 적용됩니다. 그래서 blv는 bl, blv로 토큰 화되고 bl은 bl과 일치합니다!

분석되지 않은 TermQuery를 사용할 수 있습니다.

귀하의 질의가 없기 때문에 더 말하기가 어렵습니다.

데이빗

+0

감사합니다. – axsuul

관련 문제