在solr中对原始标记进行索引

问题描述 投票:1回答:1

假设我有一个字段类型如下。

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

由于stopWords过滤器,"is "将被删除,而 "barking "将由于词干过滤器变成 "bark"。

我希望下面的 tokens 会被索引。

"My", "my", "dog", "barking", "bark", "dogs", "#DOGS".

我考虑过在WordDelimiterGraphFilterFactory中使用 "perserveOriginal "参数 但它只对带有特殊字符的标记有效 而且 "原始标记 "会通过之后的其他过滤器。

我知道显而易见的方法是写一个自定义的TokenFilter,在tokenizer之后以原始形式索引token,但我的问题是Solr中是否有内置的东西允许这样做。

我使用的是Solr 6.5.1。

谢谢:)

indexing solr nlp solrcloud solr-schema
1个回答
0
投票

很好的问题,与保持natura语言搜索的相关性有关,可能以下内容会有帮助。

如果要搜索的字段只有上述filedType的字段,即 "text_body",而你想同时拥有字干和原始的tokans来搜索你要搜索的文件列表中的所有文件。

然后尝试创建一个额外的字段(比如field_withoutStemmer),用另一个字段类型,比如 "text_body",但是不需要跟随过滤器。

<filter class="solr.PorterStemFilterFactory"/>

除此之外,如果你使用的是dismaxedismax查询分析器,那么你可能需要将 "tie "参数设置为非零值(可能是tie=1.0)。

设置 "tie=1.0 "将产生文档的得分=匹配文档的两个字段的得分之和,否则将产生离散,你将只有两个字段中的一个字段的最高得分。

© www.soinside.com 2019 - 2024. All rights reserved.