2017-10-06 8 views
0

Solr(バージョン6.5)で大きなテキスト段落を索引付けしています。ソルで長さが3以上の索引語

長さが3文字を超える単語(文字のみ)のインデックスを作成する必要があります。しかし、必要な数の索引付け。例 - 'ask'と 'as'は不要ですが '10'と '101'が必要です。

これを達成する1つの方法は、すべての組み合わせをstopwords.txtファイルで使用することです。

誰かがこれを達成するためのよりよい方法を提案できますか?

答えて

1

fieldTypeアナライザでフィルタを設定できます。

一致する値を置き換えるパターンフィルタがあります。それらを空の値で置き換えることができます。このようなもの:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory" /> 
    <filter class="solr.LowerCaseFilterFactory" /> 
    <filter class="solr.ASCIIFoldingFilterFactory" /> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="(\b[a-z]{1,3}\b)" replacement="" replace="all" /> 
    </analyzer> 
</fieldType> 

多分あなたの要件を満たすためにパターンを変更する必要があります。

更新:パターンを更新しました。私はこの1つ(\ b [a-z] {1,3} \ b)がそのトリックを行うべきだと思います。少なくとも私はhereをテストしましたが、あなたのルールに適合しています。 基本的パターンはちょうどまた、私は、PatternFilter前LowerCaseFilterと(あなたはおそらくすでに設定されている)ASCIIFoldingFilterを追加した3サイズ1のAZの文字と言葉(ものは無視されます)

文句を言いますパターンフィルタは大文字と特殊文字について不平を言う必要はありません。問題が何であるかである - 単語/トークンの長さを考慮していない。これは-Z0-9の外の任意の文字を置き換えますhttps://lucene.apache.org/core/6_6_1/analyzers-common/org/apache/lucene/analysis/pattern/PatternReplaceCharFilter.html

+0

:あなたはより多くの情報が必要な場合は、ここで

は、フィルタについてのドキュメントです約。 Askerは、4文字より短い_トークン_をすべて削除しますが、トークンが数字である場合は削除しません。おそらく '^ [^ 0-9] {1,3} $'を代わりに使って修正することができます。インデックス作成のみ、またはクエリとインデックス作成の両方のユースケースに依存します。 – MatsLindh

+0

Askerは、私が彼に与えたものである特定のルールに基づいていくつかのトークンを無視するより良い方法を望んでいます。答えの中で述べたように、彼は彼のルールを満たすためにパターンを適合させるだけでよい。私は正規表現の専門家ではないが、別の人または自分でその部分を正しく得ることができる。その間、私はそれについても見ています。 –

関連する問題