2017-05-12 16 views
1

私は以下の基準で検索を実行する必要があります。Elasticsearchで適切な分析装置を選択する方法

1]大文字小文字を区別しないマッチング
2]特殊文字は

3と一致]部分一致

次のように私は私がインデックス化されますが を必要とする上記のすべて満たしている、「NGRAMフィルタ」を使用しています150ワードまでの長さを持つ可能性のある「コメント」、「説明」などのフィールドを持つ非常に巨大なデータです。 Webからの参考文献から、 "ngram"フィルタを使用すると、ディスク容量が大きくなります。 上記の要件に

{ 
     "template": "*", 
     "settings": { 
      "analysis": { 
       "filter": { 
        "ngram_filter": { 
         "type": "ngram", 
         "min_gram": 1, 
         "max_gram": 25 
        } 
       }, 
       "analyzer": { 
        "case_insensitive": { 
         "tokenizer": "whitespace", 
         "filter": [ 
          "ngram_filter", 
          "lowercase" 
         ] 
        }, 
        "search_analyzer": { 
         "type": "custom", 
         "tokenizer": "whitespace", 
         "filter": "lowercase" 
        } 
       } 
      } 
     }, 
     "mappings": { 
      "incidents": { 
       "dynamic_templates": [ 
        { 
         "strings": { 
          "match_mapping_type": "string", 
          "mapping": { 
           "type": "string", 
           "fields": { 
            "keyword": { 
             "type": "keyword", 
             "ignore_above": 256 
            } 
           }, 
           "analyzer": "case_insensitive", 
           "search_analyzer": "search_analyzer" 
          } 
         } 
        } 
       ] 
      } 
     } 
    } 

感謝を満たすためにあらゆる選択肢があります!

答えて

1

検索パフォーマンスも重要であると思います。この場合、ngramsを使用する必要があります。しかし、最小限のNgramサイズを減らすことができます。たとえば、1文字または2文字の大文字/小文字をスキップして一致する場合は、min_gram3以上に設定できます。ディスクの使用量がわずかに減少します。

部分一致のクエリwildcardまたはquery_stringを使用することもできます。最初のものは大文字小文字を区別し、2番目は大文字と小文字を区別しません。この場合、ディスク使用のオーバーヘッドはありませんが、パフォーマンスが大幅に低下します。

検索速度とディスク使用量との間には、しばしばトレードオフがあります。通常は、必要なパフォーマンスを達成するために適切な事前索引付け(nグラムアプローチ)を行う方が良いです。

+0

ありがとうございました!部分一致のためにワイルドカードを使用しようとしましたが、大文字と小文字が区別され、使用できませんでした。 約150〜200語を含むフィールドにngramフィルタを使用できますか? – SSG

+0

'query_string'クエリを試すこともできます。しかし、パフォーマンス上の理由から、n-gramを使い続ける方が良いでしょう。それらはトークンでもユニークでもないので、オーバーヘッドがあまり大きくならないようにしてください。したがって、トークン自体は一度しか格納されません。トークンエントリは、文字列全体ではなく、参照として保存されます – Random

+0

同じ文脈で別の質問を投稿しましたが、ここで助けてください。 https://stackoverflow.com/questions/44300200/elasticsearch-can-we-apply-both-n-gram-and-language-analyzers-during-indexing – SSG

関連する問題