首页 > 解决方案 > SOLR 会在街道名称上执行匹配吗?

问题描述

我有一个关于在 SOLR 中匹配街道名称的查询。

要匹配的实际街道名称是 POTTS ROAD EVANSFIELD VIC。我将数据存储在三个字段中:

street_name_clean : POTTSROADEVANSFIELDVIC
street_name_space : POTTS ROAD EVANSFIELD VIC
street_name : POTTS, ROAD, EVANSFIELD, VIC

如此存储数据的原因是我可以执行精确搜索、模糊搜索、ngram 搜索、近似匹配等。

我看到用户输入 POTTROAD(实际街道名称中缺少 S)并且我的所有搜索都失败的情况。

有没有一种技术可以将 POTTROAD 与上述数据相匹配?任何帮助表示赞赏。

标签: searchsolrlucene

解决方案


感谢@MatsLindh 的建议,我实现了 ShingleFilter 如下:

<fieldType name="text_general_shingle" class="solr.TextField">
    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.ShingleFilterFactory" maxShingleSize="4" outputUnigrams="false"/>
        <filter class="solr.PatternReplaceFilterFactory" pattern="(\s+)" replacement="" replace="all" />
    </analyzer>
</fieldType>

推荐阅读