通过对QParser类的继承 实现SOLR 半匹配检索(模糊搜索/模糊检索) (一)
2010-01-07 15:26
411 查看
在SOLR应用中,需要支持对指定关键词部分匹配的应用场景
如何实现SOLR的模糊检索(半匹配)?
何谓模糊检索(半匹配):
这种方式是生产环境下经常要使用到的检索方式,通过对命中请求关键词分词后的一个或多个词元的进行检索方式叫做半匹配或模糊匹配,(注意: 这里要与SOLR检索运算符“~” 检索方式区分开)。
如用户输入关键词:战争人,但是索引库里收录只有“战争之人”,这时如果输入:
name:战争人,想要在索引库里匹配到“战争之人”是不可行的,SOLR定会返回空结果集。
一般正常的做法是
输入:name:战争 OR name:人
这就是SOLR告诉我们的解决办法。
看到这里,大家可能就郁闷了,SOLR怎么可能不支持半匹配?用DISMAX啊~~~ ,我也是抱着一线希望查遍了官方WIKI和中英文网站及论坛,也使用了DISMAX的ps(Phrase Slop)参数,但都没有效果。
实在没办法,就索性啃起了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
如何实现SOLR的模糊检索(半匹配)?
何谓模糊检索(半匹配):
这种方式是生产环境下经常要使用到的检索方式,通过对命中请求关键词分词后的一个或多个词元的进行检索方式叫做半匹配或模糊匹配,(注意: 这里要与SOLR检索运算符“~” 检索方式区分开)。
如用户输入关键词:战争人,但是索引库里收录只有“战争之人”,这时如果输入:
name:战争人,想要在索引库里匹配到“战争之人”是不可行的,SOLR定会返回空结果集。
一般正常的做法是
输入:name:战争 OR name:人
这就是SOLR告诉我们的解决办法。
看到这里,大家可能就郁闷了,SOLR怎么可能不支持半匹配?用DISMAX啊~~~ ,我也是抱着一线希望查遍了官方WIKI和中英文网站及论坛,也使用了DISMAX的ps(Phrase Slop)参数,但都没有效果。
实在没办法,就索性啃起了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
相关文章推荐
- 通过对QParser类的继承 实现SOLR 半匹配检索(模糊搜索/模糊检索) (一)
- Android通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)
- jsp实现的数据库模糊搜索(可以自己设定匹配字符个数)
- Android通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)
- ios搜索(可实现模糊搜索 支持拼音检索 首字母等)
- jsp实现的数据库模糊搜索(可以自己设定匹配字符个数)
- Span使用之利用系统Span样式实现模糊搜索,匹配变色的特殊UI效果
- Android通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)
- mysql 多表关联查询 实现 全文匹配的 模糊搜索接口 SQL
- 将excel文件中的商品数据导入到数据库,并实现相关检索以及模糊搜索功能
- jQuery 实现前端模糊匹配与首字母搜索
- Android通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)
- 搜索引擎的相关搜索(基于struts2框架通过关键字与后台的xml资源进行匹配实现)
- Android类似通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)
- 通过拼音模糊搜索汉字的功能实现
- Select-DropDownList通过Javascript实现模糊搜索
- 不刷新页面jQuery模糊搜索,第二种实现---js全局变量存储数据
- 通过 Hibernate 实现 JPA 对象关系模型之继承映射策略
- jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
- 通过继承BodyTagSupport实现自定义标签