首页 > 解决方案 > 如何忽略来自 solr 的刻面中的标记

问题描述

我在 Solr 6.41 中使用:

WordDelimiterFilterFactory

为了搜索包含点的字符串而不在查询中出现。

“00120123”(返回结果也是 001.20.123)

问题是,该字段还提供了一个分面,它现在显示标记而不是整个字段。

令牌在字段类型 text_wd 中生成:

<fieldType name="text_wd" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" catenateAll="1" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
</fieldType>

<field name="refnumber" type="text_wd" indexed="true" stored="true" required="false" />

包含标记的刻面:

001 (1324)
20 (909)
123 (480)

想要的面:

001.20.123

我怎样才能保持所需的功能,同时又没有刻面中的令牌?

标签: solr

解决方案


为您的构面使用单独的字段。Facets 使用底层标记结构来生成值,您必须将该字段保留为单个值才能获得所需的 facet 类型。

使用具有使用 StrField 类型的类型的单独字段,然后使用 copyField 指令将内容refnumber也从该字段移动。

<field name="refnumber" type="text_wd" indexed="true" stored="true" required="false" />
<field name="refnumber_facet" type="string" indexed="true" stored="false" required="false" />
<copyField source="refnumber" dest="refnumber_facet"  />

推荐阅读