Solr使用NGrams实现地址搜索时拼写相近地址匹配不准问题求助
问题根源
你遇到的问题核心是COURT属于地址高频后缀,在大量文档中都存在,现有配置下NGram拆分后,单个高频词的匹配得分和目标地址多词匹配的得分被拉平,导致无关文档排名靠前,可按以下方案调整:
解决方案
配置最小匹配规则过滤无关结果
切换使用edismax查询解析器,新增mm(最小匹配数)参数,比如你的查询词拆分后为4个词时,设置mm=75%,要求文档至少匹配3个查询词才会返回,直接过滤掉仅匹配到COURT单个词的无关地址。新增精确字段加权提升目标结果排名
在schema中新增一个不使用NGram的精确文本字段,将地址字段内容拷贝到该字段,查询时给精确字段设置更高权重,配置示例如下:
<!-- 新增精确匹配字段类型 --> <fieldType name="text_exact" class="solr.TextField" omitNorms="false"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <!-- 可选配置BM25相似度优化短文本评分 --> <similarity class="solr.BM25SimilarityFactory" b="0.3" k1="1.2"/> </fieldType> <!-- 新增精确匹配字段 --> <field name="address_exact" type="text_exact" indexed="true" stored="false"/> <!-- 拷贝地址字段内容到精确字段 --> <copyField source="你的地址字段名" dest="address_exact"/>
查询时使用语法 q=(你的地址字段名:关键词 OR address_exact:关键词^5),精确匹配到更多词的目标地址会获得数倍加权,排名自然靠前。
- 可选:新增拼写纠错组件修正输入误差
针对地址拼写错误的场景,可配置Solr自带的SpellCheck组件,基于已有的正确地址库生成拼写词典,用户输入存在误差的查询词时自动纠正为正确拼写后再执行查询,从根源避免匹配偏差。
内容的提问来源于stack exchange,提问作者user2260040
相关产品推荐
相关产品推荐

