如何解决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
分析相同的字段,以查看得到的结果。这可能会给您带来足够的结果经验,以了解这些分析器之一是否足够,或者如何构建自己的分析器来指定所需的确切标记操作。您可能还想添加多个具有相同值的字段,这些字段是由不同分析仪处理的。这样,例如,您可以搜索词干和未梗的文本,是否已删除停用词,是否包含特殊字符的文本,等等。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。