【发布时间】:2018-10-02 03:09:22
【问题描述】:
我有一个关于在 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 与上述数据相匹配?任何帮助表示赞赏。
【问题讨论】:
-
一个词干分析器(或一个占有式过滤器或一个删除词尾s-es的模式替换过滤器)+一个ShingleFilter可能吗?词干分析器将删除 S,而 ShingleFilter 会将多个标记组合为一个标记 - 为您提供
POTT、POTTROAD、POTTROADEVANSFIELD等。根据用户的身份,您是否还有其他匹配失败的示例打字?结合模糊搜索的 ShingleFilter 可能也可以工作;如果您已将POTTSROAD编入索引,POTTROAD~1应该会获得成功。 -
SingleFilter 看起来是个不错的选择。即使生成的令牌是 POTTS、POTTSROAD、POTTSROADEVANSFIELD 等(最后不删除 s'es),将其与模糊搜索结合起来可能会奏效。现在的问题是如何实现 ShingleFilter 来生成上面的令牌。