2016-12-16 2 views
0

部分一致を提供するためにエッジngramトークナイザを使用しています。 私の文書はissue with edge_ngram tokenizer IN弾性検索

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" 
     } 
    } 
    } 
} 

しかし与えますが、次のように私のマッピングがある

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

のように見えます私は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" 
}