请教: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输出来,发上来看看。
|