2016-04-13 7 views
0

私はElasticSearchをカスタムインデックスと検索アナライザーで使用しています。 私はユーザーのデータを照会していますが、時には文字列にも同じオカレンスがあります。ElasticSearch analyzer:インデックス内の同じ語句を削除する方法はありますか?

例:「Hello World Hello Mr!」ここであなたは2回 "こんにちは"を見ることができます。

「Hello World」を検索している場合、「Hello World Hello Mr!」でより良いスコアを取得します。 "Hello World"よりも。論理的であっても、私はこの行動を望んでいません。

したがって、インデックス作成時に同じ単語を削除することは可能ですか?例:「Hello World Hello!」 => "Hello World Mr!"

私の現在のマッピングと設定:

settings index: { number_of_shards: 1, number_of_replicas: 1 }, analysis: { 
    analyzer: { 
     custom_analyzer: { 
     tokenizer: "custom_tokenizer", 
     filter: ["lowercase", "asciifolding", "custom_spliter"] 
     } 
    }, 
    filter: { 
     custom_spliter: { 
     type: "word_delimiter", 
     preserve_original: "true" 
     } 
    }, 
    tokenizer: { 
     custom_tokenizer: { 
     type: "nGram", 
     min_gram: "3", 
     max_gram: "3", 
     token_chars: [ "letter", "digit" ] 
     } 
    } 
    } do 
    mappings dynamic: 'false' do 
     indexes :searchable, analyzer: "custom_analyzer" 
    end 
    end 

です-ことが可能それを行うには?

答えて

1

これを実現するには、unique token filterをアナライザーに追加することができます。
同じ位置(例:同義語)または任意の位置にある重複トークンを削除できるように設定できます。

+0

ちょうど完璧に動作します!ありがとう –

関連する問題