1

.txt ファイル内の指定されたフレーズに基づいてデータをトークン化するものが必要です。通常、ファセット クエリでは空白のトークン化されたファセットが返されます。しかし、私は結果がこのようになりたいです。

たとえば、私のデータは「aaa bbb-ccc ddd eee」で、フィールド「test_data」の場合、ファセットは次のようになります

<lst name="test_data">
    <int name="aaa">1</int>
    <int name="bbb-ccc">1</int>
    <int name="ddd eee">1</int>
</lst>

somefile.txt には「bbb-ccc」と「ddd eee」がフレーズとして含まれます

ありがとう

4

2 に答える 2

1

KeepWordFilterFactoryがその仕事をすることができることをちょうど知りました。このフィールドタイプをスキーマに追加しました

<fieldType name="text_keepword" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.KeepWordFilterFactory" words="keepwords.txt" ignoreCase="false" enablePositionIncrements="false"/>
    </analyzer>
</fieldType>

そしてこのフィールド

<field name="keep_fld" type="text_keepword" indexed="true" stored="true"/>
于 2013-01-23T06:41:14.090 に答える
0

独自の Tokenizer を構築したくない場合は、PatternTokenizer を使用できます。

たとえば、セミコロンと 0 個以上のスペースで区切られた用語のリストがあるとします。子猫; 犬。

<fieldType name="semicolonDelimited" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.PatternTokenizerFactory" pattern=";\s*" />
  </analyzer>
</fieldType>

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.PatternTokenizerFactory

このようにして、bbb-ccc を含む独自の正規表現を追加できます。

于 2013-01-22T14:15:27.907 に答える