提问者:小点点

Lucene:搜索带有%等字符的数字


我正在使用 Lucene 索引文档并搜索 $5000 和 90% 等值,但在我的搜索结果中,我发现标准分析器在索引代码时删除了 $ 和 %。所以我只有一个没有 $ 和 % 符号的普通数字。我尝试过空格分析器和简单的分析器,但它们不考虑数字。有没有办法让标准分析器不删除索引文档中的 $ 和 %?

我当前的索引编写器代码如下:

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;
  }

共1个答案

匿名用户

首先——就索引或搜索而言,为什么在索引中需要那些特殊字符?我想,如果没有这些符号,你的搜索会非常好。

另外,恕我直言,如果这些是数值,则不应使用字符串文本字段类型,因此可能需要这些符号。如果你试图为数值数据构建一些东西,你应该尝试使用字段 LongPointDoublePoint 等 .

话虽如此,你所要求的用SOLR是可以实现的,但用普通的lucene却不行(据我所知),除非你愿意编写自己的分析器。

基本上,SOLR允许您为ananalysizer进行配置-使用StandardTokenizerFactory和货币-您无法直接使用-StandardAnalyzerSimpleAnalyzer来进行配置,因为它们做的是它们所做的-这是无法定制的。

您可以使用org.apache.lucene.analysis.custom.CustomAnalyzerCustomAnalyzer Javadoc的构建器来构建您的自定义分析器。分析器基本上由标记器和多个过滤器组成。

我不知道有什么,但是你可以从浏览依赖关系开始-

<dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
</dependency>

看看是否有适合您需要的分析器或分词器。

但同样,我觉得你的索引中不需要这些符号 - 这可以通过做一些预

如何在Solr中对具有特殊字符的单词进行索引