search - 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 与上述数据相匹配?任何帮助表示赞赏。
解决方案
感谢@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>
推荐阅读
- memory-leaks - RxJS:在 takeUntil 之后使用重复创建订阅泄漏
- angular - 如何使用 karma jasmine 对依赖于另一个函数的函数进行单元测试
- php - Cookie 不会设置,没有结果
- python - 在 python 中读取德语 csv 文件的问题
- opencv - 来自应用程序的 OpenCv + Gstreamer,初始延迟 30 秒
- amazon-web-services - 确保在 AWS S3 同步期间数据不会丢失
- php - 如何通过 agi php 写入文件?
- php - 明智地显示或隐藏内容用户角色
- python - 获取数组中最大元素的数组索引号的最佳方法
- flutter - 方法在 StreamBuilder 中被调用两次,其中包含 Flutter 中的自定义对话框