【发布时间】:2020-04-26 10:26:56
【问题描述】:
假设我有一个字段类型如下:
<fieldType name="text_body" class="solr.TextField" positionIncrementGap="100" multiValued="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory" generateWordParts="1" catenateWords="1" preserveOriginal="1"/>
<filter class="solr.FlattenGraphFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我的目标是为每个令牌索引原始令牌以及通过所有令牌过滤器后的令牌。 例如,对于文本:
"My dog is barking #DOGS"
当前字段类型(如上所述)将索引以下标记:
"my", "dog", "bark", "dogs", "#dogs"
“is”会因为 stopWords 过滤器而被删除,“barking”会因为词干过滤器而变成“bark”。
我希望将以下标记编入索引:
"My", "my", "dog", "barking", "bark", "dogs", "#DOGS".
我考虑了 WordDelimiterGraphFilterFactory 中的“perserveOriginal”参数,但它仅适用于具有特殊字符的标记,并且“原始标记”在此之后通过其他过滤器。
我知道显而易见的方法是编写一个自定义 TokenFilter,在标记器之后以原始形式索引标记,但我的问题是 Solr 中是否有内置的东西允许它。
我正在使用 Solr 6.5.1
谢谢:)
【问题讨论】:
-
将原始令牌保留在同一字段中的用例是什么?为什么不使用包含未应用过滤器的原始标记的专用字段?
-
@MatsLindh 当然,您的建议是可能的并且适合,我仍在考虑所有选项。我只是想知道是否有可能将它保持在同一个领域(我的意思是使用 solr 中构建的东西,而不编写额外的插件),然后才考虑将它作为一个选项。谢谢:)
-
在这种情况下,我建议这样做 - 为相同的内容使用不同的字段但具有不同的处理是 Lucene 和 Solr 的核心租户之一,而不是混合不同处理的令牌。
标签: indexing solr nlp solrcloud solr-schema