Solr/Lucene是一个全文检索引擎,全文引擎和SQL引擎所不一样的是强调部分相关度高的内容返回,而不是全部内容返回,
因此部份内容包含在索引库中却没法命中是正常现象。
多数状况下咱们建议优化分词器或者引擎其它部分达到预期检索效果。优化
按照以下步骤进入分词器调试界面搜索引擎
一、选择collectionspa
二、选择analysis菜单debug
三、在索引框中输入要索引的文档调试
四、在检索框中输入要检索的词语code
五、选择须要调试的字段,这里假设要将内容索引到title字段,而且在该字段上检索xml
六、点击分析按钮索引
七、在展现出来的原文分词结果(左侧)和关键词分词结果(右侧)中对比最下面一行,若右侧分词结果的全部词在左侧都能找到,那么在AND关系的检索时可以匹配;若部分可以找到,那么在OR关系的检索中可以匹配;若彻底找不到,那么没法匹配。文档
索引一条记录,id=1,title=中华人民共和国来作调试it
直接检索中华人民共和国
从上图看(图可放大),最终检索结果被解析成了”+text:中 +text:华 +text:人 +text:民 +text:共 +text:和 +text:国”,由于咱们在q的输入框中没有输入检索字段,因此solr会检索默认字段”text”,而该字段不包含咱们须要的信息,因此检索无结果。
输入正确的字段title后,能够成功检索出来
原文中华人民共和国分词后:中华、人民、共和国
搜索词中华解放军分词后:中华、解放军
部分匹配,咱们也但愿检索出来
从上图看(图可放大),最终检索结果被解析成了"+title:中 +title:华 +title:解放 +title:军",加号(+)标识逻辑与关系,至关于检索"title:中 AND title:华 AND title:解放 AND title:军",所以没法检索出来
修改默认逻辑关系(q.op=OR)为OR后,分此后的检索式加号没了,是逻辑或关系,所以可以成功检索出来。这里OR必定要大写。
这个默认检索关系能够经过修改schema.xml的defaultOperator进行配置
<solrQueryParser defaultOperator=”OR”/>
有时候用户会用空格输入多个关键字进行检索,如title:中华 人民 共和国
经过开启debugQuery参数,咱们看到,最终检索结果被解析成了
+(+title:中 +title:华) +(+text:人 +text:民) +(+text:共 +text:和 +text:国)
中华是在title上检索的,后面的词都到text字段检索了
经过指定默认字段df为title,能够修正最终检索式,从上图看,修正后结果能够正常检索返回。
以上是一些常见数据召回问题。
检索调优是搜索引擎使用中最复杂的过程,须要在长期实践中积累经验,同时须要了解数据状况,业务特色等多方面根据状况进行调整。