solr模糊查询

来源:互联网 发布:淘宝 app 版本 编辑:程序博客网 时间:2024/06/05 21:51

关于spring datasolr的模糊查询fuzzy,貌似他是按近义词进行查询,比如:

输入:人民,可以查询出:人们

输入:中共——》中国好声音

输入:中人——》中国好声音,中华人民共和国

(下面是引用别人的blog:)

在SOLR应用中,需要支持对指定关键词部分匹配的应用场景

如何实现SOLR的模糊检索(半匹配)?

何谓模糊检索(半匹配):

这种方式是生产环境下经常要使用到的检索方式,通过对命中请求关键词分词后的一个或多个词元的进行检索方式叫做半匹配或模糊匹配,(注意:这里要与SOLR检索运算符“~” 检索方式区分开)。

如用户输入关键词:战争人,但是索引库里收录只有“战争之人”,这时如果输入:

name:战争人,想要在索引库里匹配到“战争之人”是不可行的,SOLR定会返回空结果集。

一般正常的做法是

输入:name:战争 OR name:人

这就是SOLR告诉我们的解决办法。

看到这里,大家可能就郁闷了,SOLR怎么可能不支持半匹配?用DISMAX啊~~~ ,我也是抱着一线希望查遍了官方WIKI和中英文网站及论坛,也使用了DISMAX的ps(PhraseSlop)参数,但都没有效果。

实在没办法,就索性啃起了SOLR的源代码,结果发现默认检索没有使用SCHEMA配置文件中用到的分词解析器!!

最终确定一个方案通过对解析PARSER的改造实现SOLR对中文QUERY自动分词的支持。

下面就是SOLR v1.4核心源码的简单表示:

//包名:类名:类下面的方法()下一行触发代码所在行号

core:SolrCore:execute() 1303

handler:RequestHandlerBase:handleRequest()  131

handler:SearchHandler:handleRequestBody()  174

component:QueryComponent:prepare()  89  

search:QParser:getQuery() 129

search:LuceneQParserPlugin:parse()  59

component:QueryComponent:prepare()  89  

handler:SearchHandler:handleRequestBody()  195

component:QueryComponent :process()

handler:SearchHandler:handleRequestBody()  195

handler:RequestHandlerBase:handleRequest()  131

core:SolrCore:execute() 1317

servlet:SolrDispatchFilter:doFilter()246

servlet:SolrDispatchFilter:writeResponse()    259

 

 
0 0
原创粉丝点击