【问题标题】:Strip non numeric characters and convert to Float field去除非数字字符并转换为浮点字段
【发布时间】:2012-09-10 02:58:18
【问题描述】:

我正在尝试使用 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:没有类或标记器和过滤器列表的分析器

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

【问题讨论】:

    标签: solr filter


    【解决方案1】:

    试试下面的字段类型:-

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

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

    【讨论】:

    • 这很好,但它不会将其转换为浮点类型。您需要一个数字类型来正确支持范围查询。
    【解决方案2】:

    我猜他希望该字段为 TrieFloatField 类型,因为它将运行范围查询等,这将比仅作为文本字段时性能更高。

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

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 2019-07-10
      • 2014-09-25
      相关资源
      最近更新 更多