首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

透过 Solr 取得分词

2012-06-27 
通过 Solr 取得分词原文:http://blog.chenlb.com/2010/08/get-solr-analysis-word.html??Solr 1.3 只有 An

通过 Solr 取得分词

原文:http://blog.chenlb.com/2010/08/get-solr-analysis-word.html

?

?

Solr 1.3 只有 AnalysisRequestHandler 处理器,只能提交文档来观察文档的分词结果。 Solr 1.4 有了对字段的分词。FieldAnalysisRequestHandler 可以对某个字段或字段类型的分词器对查询串取到分词数据。

用 solr 的默认配置,如 solr 1.4.1。

我用 mmseg4j 为例。在 solr.root/example/solr/conf/schema.xml 的 types 元素内加:

    {       "responseHeader":{        "status":0,        "QTime":0},       "analysis":{        "field_types":{          "text_cn":{           "query":[            "com.chenlb.mmseg4j.analysis.MMSegTokenizer",[{               "text":"中国",               "type":"word",               "start":0,               "end":2,               "position":1},              {               "text":"工商",               "type":"word",               "start":2,               "end":4,               "position":2},              {               "text":"银行",               "type":"word",               "start":4,               "end":6,               "position":3}]]}},        "field_names":{}}}  
?

就可以取得查询串的分词结果。

这个功能可以解决,如搜索“清华大学” 找不到 “清华 大学” 文档的问题。这个问题的根本原因是 lucene / solr 使用的查询解析器生成的 Query 是短语查询。短语查询默认又是连续的词中没有其它字符。所以会找不到。

目前我知的方式大概有二种:

1、查询前分词一遍,把分出的词用空格分开,再去搜索(叫它为查询预处理)。查询前分词可以上面的接口。

2、扩展 solr query parser,返回 boolean query。

当然还有同学回复说指定短语的距离,如 "清华大学~100",这个可以投机使用,不够可靠。

热点排行