【问题标题】:Lucene: Search for numbers with characters like % attached to themLucene:搜索带有 % 等字符的数字
【发布时间】:2017-06-27 19:17:27
【问题描述】:

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

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

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

【问题讨论】:

    标签: lucene


    【解决方案1】:

    首先 - 就索引或搜索而言,为什么在索引中需要这些特殊字符?我想,如果没有这些符号,您的搜索将完全正常。

    另外,恕我直言,如果这些是数值,您不应该使用 StringText 字段类型,可能这就是为什么您首先需要这些符号。如果您正在尝试为数字数据构建一些东西,您应该尝试使用字段 LongPointDoublePoint 等。

    话虽如此,除非您愿意编写自己的分析器,否则您所要求的可以通过 SOLR 实现,但不能通过普通的 lucene(据我所知)实现。

    基本上,SOLR 允许您为分析仪进行配置 - Using StandardTokenizerFactory with currency - 您无法通过直接使用 - StandardAnalyzerSimpleAnalyzer 进行配置,因为它们会做他们所做的事情 - 这是不可能的定制。

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

    我不知道,但您可以从浏览依赖项开始 -

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

    查看是否有任何分析器或标记器满足您的需要。

    但是,我觉得您不需要索引中的这些符号 - 这可以通过对索引和搜索进行一些前后处理来实现。

    How to index words with special character in Solr

    【讨论】:

    • 您也可以使用 lucene 构建自己的 CustomAnalyzer。使用 CustomAnalyzer.Builder 实现起来并不难:CustomAnalyzer Javadoc
    • 在答案中包含您的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多