2011-05-24 80 views
0

我需要能够使用termDocs和Term's返回结果。我不返回任何结果时,我使用标准的分析,对其他分析仪任何想法avaliable执行所有的标准分析仪相同的操作,并返回使用类似字词的搜索结果(例如条款而─的#define):Java Lucene:搜索包含非字母数字字符的术语

 analyser = new StandardAnalyser(Version.LUCENE_30); 
     reader = IndexReader.open(FSDirectory.open(IndexDir), true); 
     TermDocs td = reader.termDocs(); 
     QueryParser parserContents = new QueryParser(Version.LUCENE_30,field,analyser); 
     query = parserContents.parse(searchTerm); 
     docs = search.search(query, 100000); 
     ScoreDoc[] documents = docs.scoreDocs; 
     for(ScoreDoc match : documents) 
     { 
     td.seek(new Term(field,w)); 
     td.skipTo(match.doc); 
     hits = td.freq(); 
     } 

不过我做的当我尝试使用queryparser而不是termdocs时得到结果。对于像#define(特殊字符#)这样的术语,匹配在上述上下文中始终为零。

+1

如果您可以显示完整的代码块这有困难吗?你如何得到上面的读者?用哪个查询条件?如http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Escaping%20Special%20Characters所述,您是否正确转义? – Femi 2011-05-24 13:32:04

+0

@Femi:更新了我必须得到的读者,但我认为它更多的是标记,而索引或类似的东西影响特殊字符,就像我们没有逃避# – remo 2011-05-24 13:54:52

回答

1

StandardAnalyzer做了大量的令牌预处理(它使用停止列表,删除非字母字符,小写字母等),以便可能会说明您在搜索结果中看到的内容。尝试使用SimpleAnalyzer分析相同字段,或者甚至可以使用WhitespaceAnalyzer来查看您获得的结果。这可能会给你足够的结果经验,以便知道这些分析器中的一个是否足够,或者如何构建自己的指定您需要的确切标记操作。您可能还需要添加多个字段,并使用不同分析仪处理的相同值。这样,例如,您可以搜索词干和非词序化文本,包含或不包含停用词的文本,包含或不包含特殊字符等。