我正在尝试将诸如电子邮件
之类的词索引为电子邮件
、电子邮件
和电子邮件
使用 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/