[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(可以模仿现成的),在处理查询那里先给分词,然后再提交给下一层。
Global site tag (gtag.js) - Google Analytics