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"/>