2017-12-18 14 views
0

テキストブロック内の部分フレーズを検索する必要があります。ほとんどの単語は標準の長さになります。 max_gramの値を10にしておきたいのですが、それよりも多くの文字を含むID /コードが時々あることがあります。最初の10文字が一致するクエリを入力した後で残りの文字は表示されません。用語がngramの長さを超えたときにfalse検索結果を返す検索結果のクエリ

例えば、ここでのマッピングは次のとおりです。

PUT my_index 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "autocomplete": { 
      "tokenizer": "autocomplete", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     }, 
     "tokenizer": { 
     "autocomplete": { 
      "type": "edge_ngram", 
      "min_gram": 1, 
      "max_gram": 10, 
      "token_chars": [ 
      "letter" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "doc": { 
     "properties": { 
     "title": { 
      "type": "text", 
      "analyzer": "autocomplete" 
     } 
     } 
    } 
    } 
} 

とドキュメント:

POST my_index/doc/1 
{ 
    "title": "Quick fox with id of ABCDEFGHIJKLMNOP" 
} 

私は、クエリを実行した場合:

POST my_index/doc/_search 
{ 
    "query": { 
    "match_phrase": { 
     "title": { 
     "query": "fox wi" 
     } 
    } 
    } 
} 

を期待どおりにドキュメントを返します。しかし、私がこれを実行した場合:

POST my_index/doc/_search 
{ 
    "query": { 
    "match_phrase": { 
     "title": { 
     "query": "ABCDEFGHIJxxx" 
     } 
    } 
    } 
} 

また、これを実行しないでください。 xが10番目の文字の後にあるが、その前にない場合は、これが実行されます。どうすればこれを避けることができますか?私は、バージョン5.デフォルトで

答えて

0

を使用しています

、索引付け時に使用されているアナライザは、検索語に使用されているedge_ngram・アナライザを意味し、検索時に使用されるのと同じアナライザです。これはあなたが望むものではありません。検索用語として10トークン、最後の3文字は含まれません。

あなたのマッピングにはSearch Analyzerをご覧ください。このドキュメントでは、この特定のユースケースを指摘しています。

ただし、自動補完のためにedge_ngramトークナイザを使用する場合など、検索時に別のアナライザを使用することは意味があります。

標準アナライザは、あなたのニーズに合うことがあります。

{ 
... 
    "mappings": { 
    "doc": { 
     "properties": { 
     "title": { 
      "type": "text", 
      "analyzer": "autocomplete", 
      "search_analyzer": "standard" 
     } 
     } 
    } 
    } 
} 
関連する問題