1

copyFieldコマンドを使用して、数値を含むテキストフィールドを取得しようとしていますが、範囲フィルタリング可能な数値フィールドにいくつかの関連テキストがあります。

例えば。通常値1.3または200ダーティ値200ccまたは1,500

フィルタを使用して数字以外の文字を削除するFloatフィールドタイプを設定することは可能ですか?

このように定義すると、フィルターが処理されていないようです

    <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

以下のフィールドタイプを試してください:-

<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 に答える
0

彼はフィールドをTrieFloatFieldタイプにしたいと思っていると思います。これは、テキストフィールドの場合よりもパフォーマンスが向上する範囲クエリなどを実行するためです。

そのための 1 つの方法は、更新プロセッサを使用することです。そこでクリーンアップを実行し、適切な数値をフィールドに挿入できます。

于 2012-09-10T10:25:23.733 に答える