2016-12-16 85 views
0

我正在使用邊緣ngram tokenizer,以提供部分匹配。 我的文件看起來像問題與edge_ngram tokenizer IN彈性搜索

Name 
Labson series LTD 2014 
Labson PLO LTD 2014A 
Labson PLO LTD 2014-I 
Labson PLO LTD. 2014-II 

我的映射如下

PUT my_index 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "autocomplete": { 
      "tokenizer": "autocomplete", 
      "filter": [ 
      "lowercase" 
      ] 
     }, 
     "autocomplete_search": { 
      "tokenizer": "lowercase" 
     } 
     }, 
     "tokenizer": { 
     "autocomplete": { 
      "type": "edge_ngram", 
      "min_gram": 2, 
      "max_gram": 40, 
      "token_chars": [ 
      "letter", 
      "digit" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "doc": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "analyzer": "autocomplete", 
      "search_analyzer": "autocomplete_search" 
     } 
     } 
    } 
    } 
} 

PUT my_index/doc/1 
{ 
    "title": "Labson Series LTD 2014" 
} 

PUT my_index/doc/2 
{ 
    "title": "Labson PLO LTD 2014A" 
} 


PUT my_index/doc/3 
{ 
    "title": "Labson PLO LTD 2014-I" 
} 


PUT my_index/doc/4 
{ 
    "title": "Labson PLO LTD. 2014-II" 
} 

下面的查詢給了我3個文件是正確的(Labson PLO LTD 2014ALabson PLO LTD 2014-ILabson PLO LTD. 2014-II

GET my_index/_search 
{ 
    "query": { 
    "match": { 
     "title": { 
     "query": "labson plo", 
     "operator": "and" 
     } 
    } 
    } 
} 

但是,當我輸入Labson PLO 2014A它給我0文件

GET my_index/_search 
{ 
    "query": { 
    "match": { 
     "title": { 
     "query": "Labson PLO 2014A", 
     "operator": "and" 
     } 
    } 
    } 
} 

我希望這會返回1個文檔Labson PLO LTD 2014A,但由於某種原因,它似乎不索引令牌中的數字。讓我知道如果我在這裏錯過任何東西。

回答

0

在您的autocomplete_search中,您正在使用lowercase tokeinzer。 ,其一起執行Letter TokenizerLower Case Token Filter的功能。

https://www.elastic.co/guide/en/elasticsearch/reference/2.3//analysis-lowercase-tokenizer.html

現在讓我們來看看有什麼Letter Tokenizer一樣。

字母標記器只要遇到不是字母的字符就將文本分解爲字詞。

https://www.elastic.co/guide/en/elasticsearch/reference/master/analysis-letter-tokenizer.html

所以你的情況,當你查詢。

「查詢」: 「Labson PLO 2014A」,

查詢居然成爲

「+標題:labson +標題:PLO +標題:」

由於字母標記器2014年下降。現在您的索引標記不包含只有字母a的標記。這就是爲什麼你沒有得到任何結果。

您可以分析您的查詢像這樣kibana

POST my_index/_validate/query?explain 
{ 
    "query": { 
    "match": { 
     "title": { 
     "query": "Labson PLO 2014a", 
     "operator": "and" 
     } 
    } 
    } 
} 

,你會看到2014年越來越下降。來自最終查詢。

還看什麼標記生成器生成的字母使用下面的查詢

POST _analyze 
{ 
    "tokenizer": "letter", 
    "text": "Labson PLO LTD 2014a" 
}