我使用Lucene索引文档并搜索$ 5000和90%等值,但在我的搜索结果中,我发现标准分析器在索引代码时删除了$和%。所以我只有一个没有$和%符号的普通数字。我已经尝试过空白分析仪和简单的分析仪,但他们没有考虑数字。反正是否要使StandardAnalyzer不删除索引文档中的$和%?
我当前的indexwriter代码如下所示:
private IndexWriter createWriter() throws IOException {
FSDirectory dir = FSDirectory.open(Paths.get(INDEX_DIR));
IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer());
IndexWriter writer = new IndexWriter(dir, config);
return writer;
}
答案 0 :(得分:0)
首先 - 就索引或搜索而言,为什么在索引中需要这些特殊字符?我想,如果没有这些符号,您的搜索将完全正常。
另外,恕我直言,如果这些是数值,你不应该使用String
或Text
字段类型,可能,这就是你在第一时间需要这些符号的原因。如果您尝试为数字数据构建内容,则应尝试使用字段LongPoint
,DoublePoint
等。
话虽如此,你所要求的是SOLR可以实现的,但不是普通的lucene(据我所知),除非你愿意编写自己的分析仪。
基本上,SOLR允许您为您的分析仪进行配置 - Using StandardTokenizerFactory with currency - 您无法通过直接使用 - StandardAnalyzer
或SimpleAnalyzer
进行配置,因为它们可以做什么他们这样做 - 不能定制。
您可以使用org.apache.lucene.analysis.custom.CustomAnalyzer
CustomAnalyzer Javadoc的构建器来构建自定义分析器。分析器基本上由一个标记器和多个过滤器组成。
我不知道,但你可以从浏览依赖开始 -
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
</dependency>
查看是否有您需要的分析仪或标记器。
但同样,我觉得你在索引中不需要那些符号 - 这可以通过做一些pre&amp; amp;用于索引和搜索的后处理。