【发布时间】:2026-02-13 07:40:02
【问题描述】:
我正在将原始内容索引到文档中,对于包含电子邮件(例如 robby.pond@email.com)的文档,我需要在文档中搜索 robbypond。
目前我正在使用 ClassicTokenizer(也用于电话号码的特殊处理)和 WordDelimiterGraphFilter,这是一个简化的分析器链。
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
</analyzer>
</fieldType>
这会生成以下所有类型为 EMAIL 的令牌。
robbypondgmailcom 罗比池 gmail com
问题是我有一个要求,比如 robbypond 之类的搜索会命中文档。是否有任何现有的过滤器或一组参数可用于连接 robby 和 pool 令牌并将 robbypond 令牌添加到令牌流?
【问题讨论】:
-
Shingle 过滤器将为您连接连续的标记,并带有可选的分隔符:lucene.apache.org/solr/guide/8_7/… - 但这取决于您需要这些匹配的精确程度(即您将丢失有关 gmail 的元数据.com 在
@之后,因此您还将获得pondgmail作为令牌)。 -
@Robby 你有没有机会仔细阅读我的答案,如果你有任何疑问,请随时发表评论,已经有一段时间了,如果你能提供更新会很棒:)
标签: elasticsearch search solr lucene