Java Lucene:搜索包含非字母数字字符的术语

时间:2011-05-24 13:01:15

标签: java lucene

我需要能够使用termDocs和Term's返回结果。当我使用标准分析仪时,我没有返回任何结果,其他分析仪上的任何想法都可以执行与标准分析仪相同的操作并使用诸如(例如term- #define)之类的术语返回结果:

      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 个答案:

答案 0 :(得分:1)

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