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