2012-10-16 130 views
0

我無法使edgengram查詢正常工作。我有一個記錄「blue grass」,edgengram最小值爲2.查詢字符串「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" 
       } 
      }] 
     } 
    } 
}' 

由於某種原因,我從中得到了一個結果。誰能解釋爲什麼?謝謝。我想要發生的是「blv」不應該返回「藍色草地」,儘管「bl」應該。我已經使用了分析API,並將「blue grass」分解爲「bl」,「blu」,「blue」,「gr」,「gra」,「gras」,「grass」,但「blv」 t匹配任何這些。

回答

2

正如David在他的回答中告訴你的一些彈性搜索查詢分析。通常你不想將ngrams應用到你的查詢中,但是你似乎已經知道給定你的映射。事實上,沒有考慮到ngram的搜索分析器的原因是一個錯字:search_anaylzer而不是search_analyzer。這就是爲什麼您的查詢變爲blblv,並且bl與返回的文檔匹配。

+0

哦,我的,多麼尷尬。就是這樣,非常感謝...... /臉紅 – axsuul

1

當您使用MatchQuery或QueryString搜索某些內容時,將應用相同的分析器。 所以blv被標記爲bl,blv和bl匹配bl!

您可以使用未分析的TermQuery。

很難說更多,因爲我沒有你的查詢。

David

+0

謝謝,不知道! – axsuul

相關問題