Elasticsearch带状疱疹和停车词



https://www.elastic.co/guide/guide/en/elasticsearch/guide/guide/current/shingles.html提到potwords的标准过滤器在搜索时会引入负面效果,使用带状疱疹,由于过滤器替换了用下划线替换停止词,并用下划线产生令牌(与"常规"文本查询不匹配)。

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

无论如何是否可以解决此问题或达到相同的结果,而无需使用不支持的enable_position_increments?还是强调可以解决的小问题?

我还在想,如果您使用相同的分析仪进行搜索和索引,这是否可能是一个问题:如果查询包含progwords,它们是否会被_替换,从而生成将符合索引的带状疱疹的代币(即使停止词不同)?

我发现可能的解决方案是将filler_token参数设置为木滤器上的一个空字符串,因此从令牌中简单省略了下划线:

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

有人可以评论这是否取得相同的结果,或者是否会在得分或匹配方面产生任何无法预料的问题?_Analyze的结果似乎正确,省略了。

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

"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"
  }
]

最新更新