Elasticsearch带状疱疹和停用词

时间:2017-02-23 12:35:29

标签: elasticsearch elasticsearch-2.0

https://www.elastic.co/guide/en/elasticsearch/guide/current/shingles.html的示例提到,当使用带状疱疹进行搜索时,停用词的标准过滤器会产生负面影响,因为过滤器会使用下划线替换停用词并生成带下划线的令牌(与“常规”不匹配)文本查询)。

但是,它建议使用Lucene不再支持的 enable_position_increments 参数(并且至少在ES 2.4上产生错误)。

无论如何都可以解决这个问题,或者在不使用不支持的enable_position_increments的情况下获得相同的结果?或者下划线是一个可以解决的小问题?

如果您使用相同的分析器进行搜索和索引,我还在考虑这是否是一个非问题:如果查询包含停用词,它们将被_替换,从而生成与索引的带状疱疹相匹配的令牌(即使关键词不同)?

2 个答案:

答案 0 :(得分:2)

我发现一个可能的解决方案是将filler_token parameter设置为木瓦过滤器上的空字符串,因此只需从标记中省略下划线:

"filter_shingle": {
                "type": "shingle",
                "max_shingle_size": 5,
                "min_shingle_size": 2,
                "output_unigrams": "false",
                "filler_token": ""
            }

有人可以评论这是否会达到相同的结果,或者是否会产生任何与评分或匹配相关的无法预料的问题? _analyze的结果似乎是正确的,_被省略。

答案 1 :(得分:1)

我用这种方式来处理这种情况

"filter_shingle": {
                "type": "shingle",
                "max_shingle_size": 2,
                "min_shingle_size": 2,
                "output_unigrams": "true",
                "filler_token": ""
            }.

"analyzer":[   
  "my_shingle":{
    "filter":["lowercase","stop","filter_shingle","trim"],
    "tokenizer": "standard"
  }
]