请教:field中,全字母或全数字可以检索,如果是两者都有就无法检索到

outrace 2008-07-27
建立索引代码如下:
Analyzer analyzer = new PaodingAnalyzer();
writer = new IndexWriter(idxPath, analyzer);
....
doc.add(new Field("UserId", "这个从数据库得到的值",Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.add(new Field("FileContent", "从文件获取的文本",Field.Store.YES, Field.Index.TOKENIZED,Field.TermVector.WITH_POSITIONS_OFFSETS));

使用的是qieqie老大的“庖丁解牛”分词。
对于文件的作者,使用上面的代码加入到索引文件中。

使用以下代码进行搜索
Analyzer analyzer = new PaodingAnalyzer();
QueryParser parser = new QueryParser("FileContent", analyzer);
Query q = parser.parse("+(FileContent:strContent)+(UserId:strUserId)");
is = new IndexSearcher("索引目录");
hits = is.search(q);

如果这里的strUserId都是数字,或者都是字母
检索结果是正确的,如果既有数字,又有字母
那就什么都检索不出来,而其实是有匹配记录的。

谢谢。
chencang 2008-07-27
我感觉问题出在这儿:
你的UserId是UN_TOKENIZED,也就是说analyzer不会对这个field进行分词,但会索引的。
看看下面情况,如果UserId全数字或全字母,而当你搜索的时候也用与之对应的数字或字母来查询,肯定能查到。
而UserId如果是数字和字母的混合,而此时你的查询词还是全数字或全字母那肯定查不到了,因为查询的时候整个field域的值是作为全体来匹配的(就是UN_TOKENIZED的原因),这个时候你试试你的查询词也变为字母和数字混合的样子,应该就能查到了。

这只是我的个人理解,不知道对不对,楼主参考下吧
amw_demon 2008-07-28
你把Query输出来,发上来看看。
Global site tag (gtag.js) - Google Analytics