ElasticSearch analyzer:有没有办法在索引中删除相同的单词?

时间:2016-04-13 15:46:28

标签: elasticsearch find-occurrences

我正在使用带有自定义索引和搜索分析器的ElasticSearch。 我正在查询用户数据,有时候,字符串中也会出现相同的情况。

示例:“你好世界你好先生!”在那里你可以看到2次“你好”。

如果我正在寻找“Hello World”,我会在“Hello World Hello Mr!”中获得更高的分数。比“Hello World”。我不希望这种行为,即使它是合乎逻辑的。

那么,索引时是否可以删除相同的单词?示例:“Hello World Hello Mr!” => “Hello World先生!”

我当前的地图和设置:

  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 个答案:

答案 0 :(得分:1)

您可以将unique token filter 添加到分析仪中以实现此目的 它允许配置,以便您可以删除在相同位置(例如,同义词)或任何位置发生的重复令牌。