在建立的索引中,我有兴趣运行查询,然后(使用构面)返回该查询的带状疱疹。这是我在文字上使用的分析仪:
{ "settings": { "analysis": { "analyzer": { "shingleAnalyzer": { "tokenizer": "standard", "filter": [ "standard", "lowercase", "custom_stop", "custom_shingle", "custom_stemmer" ] } }, "filter": { "custom_stemmer" : { "type": "stemmer", "name": "english" }, "custom_stop": { "type": "stop", "stopwords": "_english_" }, "custom_shingle": { "type": "shingle", "min_shingle_size": "2", "max_shingle_size": "3" } } } } }
主要问题在于,对于Lucene 4.4,停止过滤器不再支持enable_position_increments消除包含停止词的带状疱疹的参数。相反,我会得到类似的结果。
enable_position_increments
“红色和黄色”
"terms": [ { "term": "red", "count": 43 }, { "term": "red _", "count": 43 }, { "term": "red _ yellow", "count": 43 }, { "term": "_ yellow", "count": 42 }, { "term": "yellow", "count": 42 } ]
自然,这极大地扭曲了返回的带状疱疹的数量。有没有一种方法可以在不进行结果后处理的情况下进行Lucene 4.4后的管理?
可能不是最理想的解决方案,但最直截了当的是将另一个过滤器添加到分析仪中以杀死“ _”填充标记。在下面的示例中,我将其称为“ kill_fillers”:
"shingleAnalyzer": { "tokenizer": "standard", "filter": [ "standard", "lowercase", "custom_stop", "custom_shingle", "custom_stemmer", "kill_fillers" ], ...
将“ kill_fillers”过滤器添加到您的过滤器列表中:
"filters":{ ... "kill_fillers": { "type": "pattern_replace", "pattern": ".*_.*", "replace": "", }, ... }