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



我需要能够使用termDocs和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(特殊字符#)之类的术语,命中率始终为零。

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

最新更新