Indexing 在solr中索引原始标记
假设我有一个字段类型,如下所示:Indexing 在solr中索引原始标记,indexing,solr,nlp,solrcloud,solr-schema,Indexing,Solr,Nlp,Solrcloud,Solr Schema,假设我有一个字段类型,如下所示: <fieldType name="text_body" class="solr.TextField" positionIncrementGap="100" multiValued="true"> <analyzer type="index"> <tokenizer class="solr.WhitespaceTokenizerFactory"/> <filter class="solr.WordDel
<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", "bark", "dogs", "#dogs"
“is”将因stopWords过滤器而被删除,“barking”将因词干过滤器而变为“bark”
我希望以下令牌将被索引:
"My", "my", "dog", "barking", "bark", "dogs", "#DOGS".
我考虑了WordDelimiterGraphFilterFactory中的“perserveOriginal”参数,但它只适用于具有特殊字符的令牌,而且“原始令牌”随后会通过其他过滤器
我知道最明显的方法是编写一个定制的令牌过滤器,在令牌化器之后以原始形式对令牌进行索引,但我的问题是Solr中是否有内置的东西允许它
我正在使用Solr6.5.1
谢谢:)关于保持自然语言搜索相关性的好问题,下面可能会有所帮助 如果要搜索的字段仅为所述文件类型的字段,即“text_body”, 你想要有词干和原始的tokans来搜索你要搜索的文件列表中的所有文件 然后尝试使用另一个字段类型(如“text_body”)创建一个附加字段(如field_withoutsemer),但不使用以下过滤器:
<filter class="solr.PorterStemFilterFactory"/>
除此之外,如果您使用的是dismax/edismax查询解析器,那么您可能希望将“tie”参数设置为非零值(可能tie=1.0)
设置“tie=1.0”将生成单据的分数=匹配单据两个字段的分数之和;否则它将断开连接,您将在两个字段中只有最高的一分。将原始标记保留在同一字段中有什么用途?为什么不建立一个包含原始代币的专用字段,而不应用过滤器呢?@MatsLindh当然你的建议是可能的,也可能是合适的,我仍在考虑所有选项。我只是想知道,在我考虑将其作为一个选项之前,是否有可能将其保留在同一个领域(我的意思是使用solr中的内置工具,而不编写额外的插件)。谢谢:)在这种情况下,我建议这样做——对相同的内容使用不同的字段,但处理方式不同,这是Lucene和Solr的核心租户之一,而不是混合使用不同处理的令牌。
<filter class="solr.PorterStemFilterFactory"/>