[solr] 分词后搜索不到结果,请教原因!
yanglaoshi5891
2009-05-18
我使用的是solr搭建的百万索引,本来挺好的,但发现这样一个问题:
举个例子: 我使用“南方奥运”进行搜索,通过analysis.jsp进行分词查询,不论是index,还是query都能正常分词。 可在solr里进行查询时却找不到结果,但如果使用“南方 奥运”(中间加个空格)却有很多结果,说明分词虽然成功了,但是在query里却没有达到效果,有没有其它人也出现过这种问题了? 我感觉分词的作用就是将分词后的词使用and进行查询,我使用的是paoding分词! (也就是说使用q=南方奥运,没有结果,q=南方 奥运,就有结果了,这是因为我在配置文件里的设置有问题吗?) |
|
yanglaoshi5891
2009-05-18
附上index与query的分词结果:
Index Analyzer 南方 奥运 南方 奥运 南方 奥运 南方 奥运 南方 奥运 南方 奥运 Query Analyzer 南方 奥运 南方 奥运 南方 奥运 南方 奥运 南方 奥运 南方 奥运 南方 奥运 |
|
ppsddt
2009-05-18
首先 说一下 加空格和不加空格是有区别的 不加空格 它会去直接索引“南方奥运”这四个字 很明显 你的数据中没有包含“南方奥运”这个字符串的的文档 而加了 空格后
会在索引中搜索南方、奥运 这两个词 也就是说只要你的文档中出现了南方 或奥运 中的任意一个词 都会被搜索出来 出不出现搜说结果不仅和分词有关 还要看的的数据是什么样的 如果你的数据中没有你要搜索的数据 那么不论是什么搜索都搜不到结果的 |
|
yanglaoshi5891
2009-05-18
感谢上面这位的回复,但我感觉有点问题吧?
分词的目的就是对一句话进行多个词语的检索,比如我在google上搜索"南方奥运"与"南方 奥运"结果就应该是一样的,因为“南方奥运”经过自动分词后结果就是"南方 奥运"呀。 再比如我搜索“我是中国北京”,就不应该全部搜索这一句话,而是"我","是","中国","北京"四个词的交集,而不是完全的这一句话。 不知道我解释清楚没有? |
|
ppsddt
2009-05-19
恩,明白你要说的是什么,不过这个要考虑的你投入的力度,Google 和 百度 他们是专门做搜索引擎的 他们面向的是互联网上的海量搜索 他们要做的是尽可能 找到用户所要找到的数据 在你的项目中如果是接在外网上的话,那么还是建议你直接用Google或百度的API实现索引, 不过看样子你用的应该是lucene做索引,问题是lucene对中文分词支持的不好,而paoding的相对来说做到了,而它是qieqie老大提供的开源分词器,毕竟人力是有限的 不可能做到十分的强大,但是如果稍微加些代码也是可以实现你所说的功能的比如:你要搜“我是中国北京”那么你可以先用paoding对这个字符串进行分词,分词后的字符串会变为“我 是 中国 北京”,让后你再搜索,就会出现你上面所说的结果,但是这样的结果是返回的数据量大,会返回很多垃圾信息,对于做
“精确(相对精确)”查询来说就不是想要的结果了 希望能够帮到你 |
|
yanglaoshi5891
2009-05-19
谢谢你的回复!
不过在solr里配置时已经指定了索引分词是paoding,查询分词是paoding,所以如果再在程序里再用paoding进行分词,是不是多此一举,我想可能是我的查询分词在使用过程中没有起作用,用analysis.jsp看查询分词也是对的,是不是我在solr的配置文件里出现了什么问题?我用的是solr1.2,所以想在这请教一下哪位大虾,遇到这种问题是怎么解决的? |
|
imjl
2009-05-22
solr 默认空格后是or
也就是a b,,,它默认解释是a or b,,,你可以在配置文件中将 or 改成 and 至于你想and和or结果并存,你可以并发两个请求(自己制作符合lucene查询语法的请求)给solr 将结果按一定规则合并下 |
|
shunkai_fu
2010-05-18
是solr的问题,因为默认的LuceneQParser不主动分词,而调用了whitespaceparser。问题是:我们怎么让lucene内核的parser知道用什么analyzer,我再仔细看看代码
|
|
wgdwyh
2010-05-18
shunkai_fu 写道 是solr的问题,因为默认的LuceneQParser不主动分词,而调用了whitespaceparser。问题是:我们怎么让lucene内核的parser知道用什么analyzer,我再仔细看看代码
在solr的 schema.xml文件中, 你可以配置自己的分词器阿. 例如 <analyzer type="query"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="com.wgd.search.analysis.HalfWidthTokenFilterFactory" /> </analyzer> |
|
shunkai_fu
2010-07-13
配置了中文分词器也没用,我试过,而且我之前也参考了很多其他人的提问,都存在这个问题。现在的做法是自己写一个简单的parser(可以模仿现成的),在处理查询那里先给分词,然后再提交给下一层。
|