Solr检索:如何匹配模糊Token及拼接字段的目标文档?
Solr查询优化方案:同时匹配多Token模糊匹配与拼接词文档
核心逻辑
通过布尔查询组合两个独立条件,用OR逻辑覆盖两类目标文档:
- 保留原有的edismax查询规则,确保至少75%的查询Token匹配
- 添加针对Shingle生成的拼接词的匹配规则,命中含连续词拼接的文档
具体查询语句
q=(_query_:"{!edismax qf='name' mm='75%'}Game Thrones Clash") OR (_query_:"{!edismax qf='name'}GameThrones OR ThronesClash")
各部分说明
第一子查询(匹配75%Token)
- 复用原有edismax配置:
{!edismax qf='name' mm='75%'}Game Thrones Clash - 因查询含3个Token,
mm='75%'自动向上取整为至少匹配2个Token,精准命中id为0553573403、0553573406、0553573407、0553573408的文档
- 复用原有edismax配置:
第二子查询(匹配拼接词)
- 利用已配置的
ShingleFilterFactory生成的拼接词(如GameThrones、ThronesClash)进行精准匹配 - 直接查询这些拼接词,命中id为0553573409、0553573410的文档
- 利用已配置的
额外验证(可选)
确认text_general字段索引分析链的Shingle配置是否正确(确保拼接词被索引),示例配置如下:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.ShingleFilterFactory" minShingleSize="2" maxShingleSize="2" outputUnigrams="true"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
outputUnigrams="true"确保原始Token也被索引,保证第一子查询正常工作minShingleSize="2"指定生成2词拼接的Shingle,与需求匹配
内容的提问来源于stack exchange,提问作者user595014
相关产品推荐
相关产品推荐

