1

我正在尝试使用 copyField 命令将包含数值但具有一些关联文本的文本字段放入可以进行范围过滤的数字字段中。

例如。正常值 1.3 或 200 脏值 200cc 或 1,500

是否可以设置使用过滤器去除非数字字符的浮点字段类型?

如果我这样定义,过滤器似乎没有处理

    <fieldType name="floatNoText" class="solr.TrieFloatField" >
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9.]" replacement="" replace="all"/>
    </fieldType>

如果我用分析器定义它:

    <fieldType name="floatNoText" class="solr.TrieFloatField" >
        <analyzer>
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9.]" replacement="" replace="all"/>
    </analyzer>
    </fieldType>

我收到以下错误:

严重:org.apache.solr.common.SolrException:没有类或标记器和过滤器列表的分析器

有没有办法设置一个数字字段,以便您可以对其应用过滤器?或者我可以让源字段将数据的剥离版本呈现给复制字段吗?

4

2 回答 2

0

我猜他希望该字段为 TrieFloatField 类型,因为它将运行范围查询等,这将比它只是一个文本字段更高效。

因此,一种方法是使用更新处理器,您可以在那里进行清理,并将正确的数值插入到字段中。

于 2012-09-10T10:25:23.733 回答
0

尝试以下字段类型:-

<fieldType name="numericOnly" class="solr.TextField" sortMissingLast="true" omitNorms="true">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="[^0-9]+" replacement="" replace="all" />
  </analyzer>
</fieldType>

这应该只存储数值并替换其他所有内容。您可以根据需要微调正则表达式。
此外,这仅适用于索引值。
该值不会被存储,因此检索到的值仍然是字母数字。

于 2012-09-10T08:03:24.743 回答