java - 如何选择Lucene中WordDelimiterFilter使用的分隔符?

标签 java lucene

我正在尝试将诸如电子邮件之类的词索引为电子邮件电子邮件电子邮件使用 Lucene 4.4.0。

Lucene 的 WordDelimiterFilter应该是理想的选择。但是,它将每个(?)非字母数字字符视为分隔符。因此,像 C++ 这样的术语被转换为 C,这不是我想要的。

因此是否可以自定义 WordDelimiterFilter 以使其使用我自己指定的分隔符?

最佳答案

您可以将“+”和其他字符显式定义为字母字符,这样它们就不会被过滤掉,并且会在搜索查询中得到考虑。

按照以下步骤进行定制

1) 在“索引”和查询“分析器下修改 WordDelimiterFilterFactory 并添加 types="alphatypes.txt"。

<filter catenateAll="0" catenateNumbers="0" catenateWords="0" class="solr.WordDelimiterFilterFactory" generateNumberParts="1" generateWordParts="1" splitOnCaseChange="1" types="alphatypes.txt"/>

根据您的情况设置其他参数

2)然后使用以下内容创建 alphatypes.txt(或任何适合您的名称)文件,并将其放置在与 schema.xml 文件相同的文件夹中。

注意:对于 # 字符,我们必须使用 unicode 值。

# A customized type mapping for WordDelimiterFilterFactory
# the allowable types are: LOWER, UPPER, ALPHA, DIGIT, ALPHANUM, SUBWORD_DELIM
#
# the default for any character without a mapping is always computed from
# Unicode character properties

+ => ALPHA
\u0023 => ALPHA

3) 重新加载核心,或重新启动 Solr。

4) 重新索引数据,以便缺失的字符包含在索引中

Solr jira 引用 https://issues.apache.org/jira/browse/SOLR-2059

关于java - 如何选择Lucene中WordDelimiterFilter使用的分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42793203/

相关文章:

java - 我们是否同步最终的实例变量?如果是那么有什么用?

performance - 如何处理对 Lucene 索引的非常频繁的更新

java - 如何在lucene文档中存储数值?

java - 如何在 java 文档中搜索 100 万个字符串?

c++ - 使用整数列表文档进行全文搜索的最佳方法

python - 尝试为 python 安装 lucene。首先需要安装jcc。为 jcc 构建 setup.py 时,出现错误 ld : library not found for -ljava

java - 清空(套接字的)InputStream

java - 安卓穿戴: API to fetch medical parameters from app?

java - 能否构建复杂度为 O(n) 的 AVL 树?

java - 逐行读取字符串