フィルター
フィルターは、トークンのストリームを調べて、使用されているフィルターの種類に応じて、それらを保持、変換、または破棄します。
フィルターについて
トークナイザーと同様に、フィルターは入力を消費し、トークンのストリームを生成します。フィルターもorg.apache.lucene.analysis.TokenStream
から派生していますが、トークナイザーとは異なり、フィルターの入力は別の TokenStream です。フィルターのジョブは通常、トークナイザーよりも簡単です。ほとんどの場合、フィルターはストリーム内の各トークンを順番に調べて、それを渡すか、置き換えるか、破棄するかを決定するためです。
フィルターは、複数のトークンを一度に考慮してより複雑な分析を行うこともできますが、これはあまり一般的ではありません。このようなフィルターの仮想的な使用例の 1 つは、2 つの単語としてトークン化される州名を正規化することです。たとえば、単一のトークン「california」は「CA」に置き換えられ、トークンペア「rhode」に続く「island」は単一のトークン「RI」になります。
フィルターは 1 つの TokenStream
を消費して新しい TokenStream
を生成するため、次々と無限に連鎖させることができます。チェーン内の各フィルターは、前のフィルターによって生成されたトークンを順番に処理します。したがって、フィルターを指定する順序は重要です。通常、最も一般的なフィルター処理が最初に行われ、後のフィルター処理ステージはより専門的になります。
フィルターの構成
フィルターは、スキーマファイル内の<filter>
要素で、<analyzer>
の子として、<tokenizer>
要素の後に構成されます。
例
名前付き
<fieldType name="text" class="solr.TextField">
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
<filter name="englishPorter"/>
</analyzer>
</fieldType>
クラス名付き (レガシー)
<fieldType name="text" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>
この例は、フィールドのテキストをトークンに分割する Solr の標準トークナイザーから始まります。次に、すべてのトークンが小文字に設定されます。これにより、クエリ時に大文字と小文字を区別しない照合が容易になります。
上記の例の最後のフィルターは、Porter ステミングアルゴリズムを使用するステマーフィルターです。
ステミング
ステマーは基本的に、単語のさまざまな形式を、それらが派生するベースまたはステム単語に戻すマッピングルールセットです。
たとえば、英語では、「hugs」、「hugging」、「hugged」という単語はすべて、ステム単語「hug」の形式です。ステマーはこれらの用語をすべて「hug」に置き換えます。これがインデックス付けされるものです。これは、「hug」のクエリが「hugged」という用語と一致するが、「huge」とは一致しないことを意味します。
逆に、クエリ用語にステマーを適用すると、「hugging」などのステミングされていない用語を含むクエリが、「hugged」など、同じステム単語の異なるバリエーションを持つドキュメントと一致できるようになります。これは、インデクサーとクエリの両方が同じステム(「hug」)にマップされるためです。
単語のステミングは、当然のことながら、非常に言語固有です。Solr には、Porter ステミングアルゴリズムに基づいた、Snowball ジェネレーターによって作成された、いくつかの言語固有のステマーが含まれています。汎用的なSnowball Porter ステマーフィルターを使用して、これらの言語ステマーのいずれかを構成できます。Solr には、英語の Snowball ステマーの便利なラッパーも含まれています。非英語の言語向けに構築された、いくつかの専用ステマーもあります。これらのステマーについては、言語分析で説明します。
引数付きのフィルター
<filter>
要素に属性を設定することで、トークナイザーファクトリーに引数を渡して、その動作を変更できます。例
名前付き
<fieldType name="semicolonDelimited" class="solr.TextField">
<analyzer type="query">
<tokenizer name="pattern" pattern="; " />
<filter name="length" min="2" max="7"/>
</analyzer>
</fieldType>
クラス名付き (レガシー)
<fieldType name="semicolonDelimited" class="solr.TextField">
<analyzer type="query">
<tokenizer class="solr.PatternTokenizerFactory" pattern="; " />
<filter class="solr.LengthFilterFactory" min="2" max="7"/>
</analyzer>
</fieldType>
次のセクションでは、このリリースの Solr に含まれているフィルターファクトリーについて説明します。
ASCII フォールディングフィルター
このフィルターは、Basic Latin Unicode ブロック (最初の 127 個の ASCII 文字) にない、アルファベット、数字、および記号の Unicode 文字を、存在する場合は ASCII 同等物に変換します。このフィルターは、次の Unicode ブロックの文字を変換します
-
Latin Extended-A (PDF)
-
Latin Extended-B (PDF)
-
Latin Extended-C (PDF)
-
Latin Extended-D (PDF)
-
IPA拡張 (PDF)
-
音声記号拡張 (PDF)
-
音声記号拡張補助 (PDF)
-
一般句読点 (PDF)
-
上付きおよび下付き (PDF)
-
囲み英数字 (PDF)
-
ディングバット (PDF)
-
補助句読点 (PDF)
-
アルファベット表示形式 (PDF)
-
半角および全角形式 (PDF)
ファクトリークラス: solr.ASCIIFoldingFilterFactory
引数
preserveOriginal
-
オプション
デフォルト:
false
true
の場合、元のトークンが保持されます: "thé" → "the", "thé"
例
名前付き
<analyzer>
<tokenizer name="whitespace"/>
<filter name="asciiFolding" preserveOriginal="false" />
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.WhitespaceTokenizer"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="false" />
</analyzer>
入力: "á" (Unicode文字 00E1)
出力: "a" (ASCII文字 97)
Beider-Morseフィルター
異なるスペルや異なる言語であっても、類似した名前を識別できるようにする、Beider-Morse Phonetic Matching (BMPM)アルゴリズムを実装します。この仕組みの詳細については、Beider-Morse Phonetic Matchingのセクションを参照してください。
BMPMアルゴリズムのバージョン3.04へのアップデートにより、BeiderMorseFilterはSolr 5.0で動作が変更されました。旧バージョンのSolrはBMPMバージョン3.00を実装していました ( http://stevemorse.org/phoneticinfo.htmを参照)。旧バージョンのSolrでこのフィルターを使用して作成されたインデックスは、再構築する必要があります。 |
ファクトリークラス: solr.BeiderMorseFilterFactory
引数
nameType
-
オプション
デフォルト:
GENERIC
名前の種類。有効な値は、
GENERIC
、ASHKENAZI
、またはSEPHARDIC
です。アシュケナージまたはセファルディの名前を処理しない場合は、GENERIC
を使用します。 ruleType
-
オプション
デフォルト:
APPROX
適用するルールの種類。有効な値は
APPROX
またはEXACT
です。 concat
-
オプション
デフォルト:
true
複数の可能性のある一致をパイプ (
|
) で結合する必要があるかどうかを定義します。 languageSet
-
オプション
デフォルト:
auto
使用する言語セット。値
auto
を使用すると、フィルターが言語を識別するか、カンマ区切りのリストを指定できます。
例
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="beiderMorse" nameType="GENERIC" ruleType="APPROX" concat="true" languageSet="auto"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.BeiderMorseFilterFactory" nameType="GENERIC" ruleType="APPROX" concat="true" languageSet="auto"/>
</analyzer>
Classicフィルター
このフィルターは、Classic Tokenizerの出力を受け取り、頭字語からピリオドを削除し、所有格から"'s"を削除します。
ファクトリークラス: solr.ClassicFilterFactory
引数: なし
例
名前付き
<analyzer>
<tokenizer name="classic"/>
<filter name="classic"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.ClassicTokenizerFactory"/>
<filter class="solr.ClassicFilterFactory"/>
</analyzer>
入力: "I.B.M. cat’s can’t"
フィルターへのトークナイザー: "I.B.M", "cat’s", "can’t"
出力: "IBM", "cat", "can’t"
Common Gramsフィルター
このフィルターは、index
時分析で使用され、ストップワードなどの一般的なトークンを通常のトークンと組み合わせることでワード・シングルの作成を行います。これにより、よりユニークな用語を持つインデックスを作成できますが、「the cat」などの一般的な単語を含むフレーズクエリの作成に役立ちます。通常、結合されたトークンを使用しない場合よりもはるかに高速です。シーケンス内の両方の用語を含むドキュメントの用語位置のみを考慮する必要があるからです。正しく使用するには、query
分析中にCommon Grams Query Filterとペアにする必要があります。
これらのフィルターはStop Filterと組み合わせることもできるため、"the cat"
を検索すると"a cat"
とは異なるドキュメントが一致し、"the"
または"a"
の病的な検索ではどのドキュメントにも一致しません。
ファクトリークラス: solr.CommonGramsFilterFactory
引数
words
-
必須
デフォルト: なし
stopwords.txt
などの、.txt形式の共通単語ファイルの名前。 format
-
オプション
デフォルト: なし
ストップワードリストがSnowball用にフォーマットされている場合は、
format="snowball"
を指定して、Solrがストップワードファイルを読み取れるようにすることができます。 ignoreCase
-
オプション
デフォルト:
false
true
の場合、フィルターは共通単語ファイルと比較する際に単語の大文字と小文字を区別しません。
例
名前付き
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="commonGrams" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="commonGramsQuery" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.CommonGramsQueryFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
入力: "the cat in the hat"
フィルター(複数)へのトークナイザー: "the", "cat", "in", "the", "hat"
(インデックス) 出力: "the"(1), "the_cat"(1), "cat"(2), "cat_in"(2), "in"(3), "in_the"(3), "the"(4), "the_hat"(4), "hat"(5)
(クエリ) 出力: "the_cat"(1), "cat_in"(2), "in_the"(3), "the_hat"(4)
Common Grams Queryフィルター
このフィルターは、Common Gramsフィルターのquery
時間分析の側面に使用されます。引数、構成例、および入出力のサンプルについては、そのフィルターを参照してください。
照合キーフィルター
照合を使用すると、言語に対応した方法でテキストをソートできます。通常はソートに使用されますが、高度な検索にも使用できます。これについては、Unicode照合のセクションで詳しく説明しました。
Daitch-Mokotoff Soundexフィルター
異なるスペルであっても、類似した名前を識別できる、Daitch-Mokotoff Soundexアルゴリズムを実装します。この仕組みの詳細については、Phonetic Matchingのセクションを参照してください。
ファクトリークラス: solr.DaitchMokotoffSoundexFilterFactory
引数
inject
-
オプション
デフォルト:
true
true
の場合、新しい音声トークンがストリームに追加されます。それ以外の場合、トークンは音声相当のものに置き換えられます。これをfalse
に設定すると、音声一致が可能になりますが、ターゲットワードの正確なスペルが一致しない場合があります。
例
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="daitchMokotoffSoundex" inject="true"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DaitchMokotoffSoundexFilterFactory" inject="true"/>
</analyzer>
Double Metaphoneフィルター
このフィルターは、commons-codecのDoubleMetaphone
エンコーディングアルゴリズムを使用してトークンを作成します。詳細については、Phonetic Matchingを参照してください。
ファクトリークラス: solr.DoubleMetaphoneFilterFactory
引数
inject
-
オプション
デフォルト:
true
true
の場合、新しい音声トークンがストリームに追加されます。それ以外の場合、トークンは音声相当のものに置き換えられます。これをfalse
に設定すると、音声一致が可能になりますが、ターゲットワードの正確なスペルが一致しない場合があります。 maxCodeLength
-
オプション
デフォルト: なし
生成されるコードの最大長。
例
インジェクトのデフォルトの動作(true
): 元のトークンを保持し、同じ位置に音声トークンを追加します。
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="doubleMetaphone"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DoubleMetaphoneFilterFactory"/>
</analyzer>
入力: "four score and Kuczewski"
フィルターへのトークナイザー: "four"(1), "score"(2), "and"(3), "Kuczewski"(4)
出力: "four"(1), "FR"(1), "score"(2), "SKR"(2), "and"(3), "ANT"(3), "Kuczewski"(4), "KSSK"(4), "KXFS"(4)
音声トークンの位置増分は0です。これは、トークンが派生した元のトークン(直前)と同じ位置にあることを示します。「Kuczewski」には2つのエンコードがあり、同じ位置に追加されることに注意してください。
例
元のトークンを破棄(inject="false"
)。
<analyzer>
<tokenizer name="standard"/>
<filter name="doubleMetaphone" inject="false"/>
</analyzer>
入力: "four score and Kuczewski"
フィルターへのトークナイザー: "four"(1), "score"(2), "and"(3), "Kuczewski"(4)
出力: "FR"(1), "SKR"(2), "ANT"(3), "KSSK"(4), "KXFS"(4)
「Kuczewski」には2つのエンコードがあり、同じ位置に追加されることに注意してください。
区切りブーストフィルター
このフィルターは、区切り文字で分割して、トークンに数値の浮動小数点ブースト値を追加します。
ファクトリークラス: solr.DelimitedBoostTokenFilterFactory
引数
delimiter
-
オプション
デフォルト:
|
(パイプ記号)トークンとブーストを区切るために使用される文字。
例
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="delimitedBoost"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.DelimitedBoostTokenFilterFactory"/>
</analyzer>
入力: "leopard|0.5 panthera uncia|0.9"
フィルターへのトークナイザー: "leopard|0.5"(1), "panthera"(2), "uncia|0.9"(3)
出力: "leopard"(1)[0.5], "panthera"(2), "uncia"(3)[0.9]
角括弧内の数値の浮動小数点数は、浮動小数点トークンブースト属性です。
例
別の区切り文字を使用する(delimiter="/"
)。
<analyzer>
<tokenizer name="standard"/>
<filter name="delimitedBoost" delimiter="/"/>
</analyzer>
入力: "leopard/0.5 panthera uncia/0.9"
フィルターへのトークナイザー: "leopard/0.5"(1), "panthera"(2), "uncia/0.9"(3)
出力: "leopard"(1)[0.5], "panthera"(2), "uncia"(3)[0.9]
N.B. 区切り文字が使用するトークナイザーと互換性があることを確認してください
Edge N-Gramフィルター
このフィルターは、指定された範囲内のサイズのEdge N-Gramトークンを生成します。
ファクトリークラス: solr.EdgeNGramFilterFactory
引数
minGramSize
-
必須
デフォルト: なし
最小グラムサイズ。> 0である必要があります。
maxGramSize
-
必須
デフォルト: なし
最大グラムサイズ。
minGramSize
以上である必要があります。 preserveOriginal
-
オプション
デフォルト:
false
true
の場合、元の用語がminGramSize
より短い場合、またはmaxGramSize
より長い場合でも保持します。
例
デフォルトの動作。
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="1" maxGramSize="1"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="1"/>
</analyzer>
入力: "four score and twenty"
フィルターへのトークナイザー: "four", "score", "and", "twenty"
出力: "f", "s", "a", "t"
例
1から4の範囲。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="1" maxGramSize="4"/>
</analyzer>
入力: "four score"
フィルターへのトークナイザー: "four", "score"
出力: "f", "fo", "fou", "four", "s", "sc", "sco", "scor"
例
4から6の範囲。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="4" maxGramSize="6"/>
</analyzer>
入力: "four score and twenty"
フィルターへのトークナイザー: "four", "score", "and", "twenty"
出力: "four", "scor", "score", "twen", "twent", "twenty"
例
元の用語を保持します。
<analyzer>
<tokenizer name="standard"/>
<filter name="edgeNGram" minGramSize="2" maxGramSize="3" preserveOriginal="true"/>
</analyzer>
入力: "four score"
フィルターへのトークナイザー: "four", "score"
出力: "fo", "fou", "four", "sc", "sco", "score"
English Minimal Stemフィルター
このフィルターは、英語の複数形の単語を単数形に語幹処理します。
ファクトリークラス: solr.EnglishMinimalStemFilterFactory
引数: なし
例
名前付き
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="englishMinimalStem"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
</analyzer>
入力: "dogs cats"
フィルターへのトークナイザー: "dogs", "cats"
出力: "dog", "cat"
English Possessiveフィルター
このフィルターは、単数所有格(末尾の's)を単語から削除します。例えば、「divers' snorkels」のs'のような複数所有格は、このフィルターでは削除されないことに注意してください。
ファクトリークラス: solr.EnglishPossessiveFilterFactory
引数: なし
例
名前付き
<analyzer>
<tokenizer name="whitespace"/>
<filter name="englishPossessive"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
</analyzer>
入力: "Man’s dog bites dogs' man"
フィルターへのトークナイザー: "Man’s", "dog", "bites", "dogs'", "man"
出力: "Man", "dog", "bites", "dogs'", "man"
Fingerprintフィルター
このフィルターは、ソートおよび重複排除された入力トークンのセットの連結である単一のトークンを出力します。これは、クラスタリング/リンクの使用事例に役立ちます。
ファクトリークラス: solr.FingerprintFilterFactory
引数
separator
-
オプション
デフォルト: スペース文字
単一の出力トークンに結合されたトークンを区切るために使用される文字。
maxOutputTokenSize
-
オプション
デフォルト:
1024
要約された出力トークンの最大長。これを超えると、出力トークンは出力されません。
例
名前付き
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="fingerprint" separator="_" />
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.FingerprintFilterFactory" separator="_" />
</analyzer>
入力: "the quick brown fox jumped over the lazy dog"
フィルターへのトークナイザー: "the", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"
出力: "brown_dog_fox_jumped_lazy_over_quick_the"
Flatten Graphフィルター
このフィルターは、シノニムグラフフィルターやワード区切りグラフフィルターなど、少なくとも1つのグラフ対応フィルターを含むインデックス時のアナライザー仕様に含める必要があります。
ファクトリークラス: solr.FlattenGraphFilterFactory
引数: なし
シノニムグラフフィルターおよびワード区切りグラフフィルターについては、以下の例を参照してください。
Hunspell Stemフィルター
Hunspell Stemフィルター
は、複数の言語をサポートします。Hunspell Stemフィルターで使用する各言語の辞書(.dic
)ファイルとルール(.aff
)ファイルを提供する必要があります。これらの言語ファイルはこちらからダウンロードできます。
結果は、提供された辞書とルールファイルの品質によって大きく異なることに注意してください。例えば、一部の言語には、形態学的情報のない最小限の単語リストしかありません。一方、ステマーがないものの、広範な辞書ファイルがある言語の場合、Hunspellステマーが適切な選択肢となる場合があります。
ファクトリークラス: solr.HunspellStemFilterFactory
引数
dictionary
-
必須
デフォルト: なし
辞書ファイルへのパス。
接辞
-
必須
デフォルト: なし
ルールファイルのパス。
ignoreCase
-
オプション
デフォルト:
false
マッチングで大文字と小文字を区別するかどうかを制御します。
longestOnly
-
オプション
デフォルト:
false
true
の場合、最長のタームのみが出力されます。 strictAffixParsing
-
オプション
デフォルト:
true
接辞解析を厳密に行うかどうかを制御します。
true
の場合、接辞ルールを読み込み中にエラーが発生するとParseExceptionが発生します。そうでない場合は無視されます。
例
名前付き
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="hunspellStem"
dictionary="en_GB.dic"
affix="en_GB.aff"
ignoreCase="true"
strictAffixParsing="true" />
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.HunspellStemFilterFactory"
dictionary="en_GB.dic"
affix="en_GB.aff"
ignoreCase="true"
strictAffixParsing="true" />
</analyzer>
入力: 「jump jumping jumped」
トークナイザーからフィルターへ: 「jump」、「jumping」、「jumped」
出力: 「jump」、「jump」、「jump」
ハイフン結合語フィルター
このフィルターは、フィールドテストで改行やその他の空白が原因で2つのトークンとしてトークン化されたハイフン結合語を再構築します。トークンがハイフンで終わる場合、それは次のトークンと結合され、ハイフンは破棄されます。
このフィルターが正しく機能するには、上流のトークナイザーが末尾のハイフン文字を削除しないようにする必要があります。このフィルターは一般的にインデックス作成時にのみ役立ちます。
ファクトリークラス: solr.HyphenatedWordsFilterFactory
引数: なし
例
名前付き
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="hyphenatedWords"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.HyphenatedWordsFilterFactory"/>
</analyzer>
入力: 「A hyphen- ated word」
トークナイザーからフィルターへ: 「A」、「hyphen-」、「ated」、「word」
出力: 「A」、「hyphenated」、「word」
ICUフォールディングフィルター
このフィルターは、Unicode TR #30: Character Foldingsで指定されたフォールディングに加えて、ICU正規化フィルター2で説明されているNFKC_Casefold
正規化形式を適用するカスタムUnicode正規化形式です。このフィルターは、ASCIIフォールディングフィルター、小文字フィルター、およびICU正規化フィルター2の組み合わせ動作のより良い代替手段です。
このフィルターを使用するには、(プラグインのインストールのセクションで説明されているように)追加の.jarファイルをSolrのクラスパスに追加する必要があります。追加する必要があるjarの詳細については、solr/modules/analysis-extras/README.md
を参照してください。
ファクトリークラス: solr.ICUFoldingFilterFactory
引数
フィルター
-
オプション
デフォルト: なし
例えば、処理対象から除外する文字のセットを指定するために使用できるUnicodeセットフィルター。UnicodeSet javadocsで詳細を確認してください。
フィルターなしの例
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="icuFolding"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUFoldingFilterFactory"/>
</analyzer>
スウェーデン語/フィンランド語の文字を除外するフィルターの例
<analyzer>
<tokenizer name="standard"/>
<filter name="icuFolding" filter="[^åäöÅÄÖ]"/>
</analyzer>
この正規化形式の詳細については、Unicode TR #30: Character Foldingsを参照してください。
ICU正規化フィルター2
このフィルターは、Unicode標準附属書#15で説明されている5つのUnicode正規化形式のいずれかに従ってテキストを正規化します。
-
NFC: (
name="nfc" mode="compose"
) 正規化形式C、正規分解 -
NFD: (
name="nfc" mode="decompose"
) 正規化形式D、正規分解、それに続く正規合成 -
NFKC: (
name="nfkc" mode="compose"
) 正規化形式KC、互換分解 -
NFKD: (
name="nfkc" mode="decompose"
) 正規化形式KD、互換分解、それに続く正規合成 -
NFKC_Casefold: (
name="nfkc_cf" mode="compose"
) 正規化形式KC、追加のUnicode大文字小文字の区別なし。ICU正規化フィルター2の使用は、小文字フィルターおよびNFKC正規化のパフォーマンスの良い代替手段です。
ファクトリークラス: solr.ICUNormalizer2FilterFactory
引数
form
-
必須
デフォルト:
nfkc_cf
正規化形式の名前。有効なオプションは、
nfc
、nfd
、nfkc
、nfkd
、またはnfkc_cf
です。 mode
-
必須
デフォルト:
compose
Unicode文字の合成と分解のモード。有効なオプションは、
compose
またはdecompose
です。 フィルター
-
オプション
デフォルト: なし
例えば、処理対象から除外する文字のセットを指定するために使用できるUnicodeセットフィルター。UnicodeSet javadocsで詳細を確認してください。
NFKC_Casefoldの例
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="icuNormalizer2" form="nfkc_cf" mode="compose"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUNormalizer2FilterFactory" form="nfkc_cf" mode="compose"/>
</analyzer>
スウェーデン語/フィンランド語の文字を除外するフィルターの例
<analyzer>
<tokenizer name="standard"/>
<filter name="icuNormalizer2" form="nfkc_cf" mode="compose" filter="[^åäöÅÄÖ]"/>
</analyzer>
これらの正規化形式の詳細については、Unicode正規化形式を参照してください。
このフィルターを使用するには、(プラグインのインストールのセクションで説明されているように)追加の.jarファイルをSolrのクラスパスに追加する必要があります。追加する必要があるjarの詳細については、solr/modules/analysis-extras/README.md
を参照してください。
ICU変換フィルター
このフィルターは、ICU変換をテキストに適用します。このフィルターは、ICUシステム変換のみをサポートします。カスタムルールセットはサポートされていません。
ファクトリークラス: solr.ICUTransformFilterFactory
引数
id
-
必須
デフォルト: なし
このフィルターで適用するICUシステム変換の識別子。ICUシステム変換の完全なリストについては、http://demo.icu-project.org/icu-bin/translit?TEMPLATE_FILE=data/translit_rule_main.htmlを参照してください。
direction
-
オプション
デフォルト:
forward
ICU変換の方向。有効なオプションは、
forward
およびreverse
です。
例
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="icuTransform" id="Traditional-Simplified"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ICUTransformFilterFactory" id="Traditional-Simplified"/>
</analyzer>
ICU変換の詳細については、http://userguide.icu-project.org/transforms/generalを参照してください。
このフィルターを使用するには、(プラグインのインストールのセクションで説明されているように)追加の.jarファイルをSolrのクラスパスに追加する必要があります。追加する必要があるjarの詳細については、solr/modules/analysis-extras/README.md
を参照してください。
キープワードフィルター
このフィルターは、指定された単語リストに記載されているトークンを除くすべてのトークンを破棄します。これは、ストップワードフィルターの逆です。このフィルターは、制約されたタームのセットの特殊なインデックスを作成するのに役立ちます。
ファクトリークラス: solr.KeepWordFilterFactory
引数
words
-
必須
デフォルト: なし
キープワードのリストを含むテキストファイルへのパス(1行に1つずつ)。空白行と
\#
で始まる行は無視されます。これは絶対パス、またはSolrのconf
ディレクトリ内の単純なファイル名である可能性があります。 format
-
オプション
デフォルト: なし
キープワードリストがSnowball用にフォーマットされている場合は、Solrがキープワードファイルを読み取れるように
format="snowball"
を指定できます。 ignoreCase
-
オプション
デフォルト:
false
true
の場合、比較は大文字と小文字を区別せずに実行されます。この引数がtrueの場合、単語ファイルには小文字の単語のみが含まれていると想定されます。
例
keepwords.txt
には以下が含まれています
happy funny silly
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="keepWord" words="keepwords.txt"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
</analyzer>
入力: 「Happy, sad or funny」
トークナイザーからフィルターへ: 「Happy」、「sad」、「or」、「funny」
出力: 「funny」
例
同じkeepwords.txt
、大文字と小文字を区別しない
<analyzer>
<tokenizer name="standard"/>
<filter name="keepWord" words="keepwords.txt" ignoreCase="true"/>
</analyzer>
入力: 「Happy, sad or funny」
トークナイザーからフィルターへ: 「Happy」、「sad」、「or」、「funny」
出力: 「Happy」、「funny」
例
キープワードをフィルタリングする前にLowerCaseFilterFactoryを使用します。ignoreCase
フラグはありません。
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
<filter name="keepWord" words="keepwords.txt"/>
</analyzer>
入力: 「Happy, sad or funny」
トークナイザーからフィルターへ: 「Happy」、「sad」、「or」、「funny」
フィルターからフィルターへ: 「happy」、「sad」、「or」、「funny」
出力: 「happy」、「funny」
KStemフィルター
KStemは、よりアグレッシブでないステマーを探している開発者向けのPorter Stem Filterの代替手段です。KStemはBob Krovetzによって記述され、Sergio Guzman-Lara(UMASS Amherst)によってLuceneに移植されました。このステマーは英語のテキストにのみ適しています。
ファクトリークラス: solr.KStemFilterFactory
引数: なし
例
名前付き
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="kStem"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.KStemFilterFactory"/>
</analyzer>
入力: 「jump jumping jumped」
トークナイザーからフィルターへ: 「jump」、「jumping」、「jumped」
出力: 「jump」、「jump」、「jump」
長さフィルター
このフィルターは、指定された最小/最大制限内の長さのトークンをパスします。他のすべてのトークンは破棄されます。
ファクトリークラス: solr.LengthFilterFactory
引数
min
-
必須
デフォルト: なし
トークンの最小の長さ。これより短いトークンは破棄されます。
max
-
必須
デフォルト: なし
トークンの最大の長さ。
min
より大きくする必要があります。これより長いトークンは破棄されます。
例
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="length" min="3" max="7"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LengthFilterFactory" min="3" max="7"/>
</analyzer>
入力: 「turn right at Albuquerque」
トークナイザーからフィルターへ: 「turn」、「right」、「at」、「Albuquerque」
出力: 「turn」、「right」
トークン数制限フィルター
このフィルターは、受け入れられるトークンの数を制限します。これは通常、インデックス分析に役立ちます。
デフォルトでは、このフィルターは、制限に達すると、ラップされたTokenStream
内のトークンをすべて無視します。これにより、incrementToken()
がfalse
を返す前にreset()
が呼び出される可能性があります。ほとんどのTokenStream
実装ではこれで許容範囲であり、ストリーム全体を消費するよりも高速です。正常に機能するためにトークンのストリーム全体を使い切る必要があるTokenStream
をラップする場合は、consumeAllTokens="true"
オプションを使用してください。
ファクトリークラス: solr.LimitTokenCountFilterFactory
引数
maxTokenCount
-
必須
デフォルト: なし
トークンの最大数。この制限に達すると、トークンは破棄されます。
consumeAllTokens
-
オプション
デフォルト:
false
最大トークン数に達した後、前のトークンフィルターのトークンを消費(および破棄)するかどうか。上記の説明を参照してください。
例
名前付き
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="limitTokenCount" maxTokenCount="10"
consumeAllTokens="false" />
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenCountFilterFactory" maxTokenCount="10"
consumeAllTokens="false" />
</analyzer>
入力 "1 2 3 4 5 6 7 8 9 10 11 12"
トークナイザーからフィルターへ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"
出力 "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"
トークンオフセット制限フィルター
このフィルターは、構成された最大開始文字オフセットより前のトークンに制限します。これは、たとえば、ハイライトを制限するのに役立ちます。
デフォルトでは、このフィルターは、制限に達すると、ラップされたTokenStream
内のトークンをすべて無視します。これにより、incrementToken()
がfalse
を返す前にreset()
が呼び出される可能性があります。ほとんどのTokenStream
実装ではこれで許容範囲であり、ストリーム全体を消費するよりも高速です。正常に機能するためにトークンのストリーム全体を使い切る必要があるTokenStream
をラップする場合は、consumeAllTokens="true"
オプションを使用してください。
ファクトリークラス: solr.LimitTokenOffsetFilterFactory
引数
maxStartOffset
-
必須
デフォルト: なし
トークンの最大開始文字オフセット。この制限に達すると、トークンは破棄されます。
consumeAllTokens
-
オプション
デフォルト:
false
最大開始オフセットに達した後、前のトークンフィルターのトークンを消費(および破棄)するかどうか。上記の説明を参照してください。
例
名前付き
<analyzer>
<tokenizer name="whitespace"/>
<filter name="limitTokenOffset" maxStartOffset="10"
consumeAllTokens="false" />
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenOffsetFilterFactory" maxStartOffset="10"
consumeAllTokens="false" />
</analyzer>
入力: 「0 2 4 6 8 A C E」
トークナイザーからフィルターへ: 「0」、「2」、「4」、「6」、「8」、「A」、「C」、「E」
出力: 「0」、「2」、「4」、「6」、「8」、「A」
トークン位置制限フィルター
このフィルターは、構成された最大トークン位置より前のトークンに制限します。
デフォルトでは、このフィルターは、制限に達すると、ラップされたTokenStream
内のトークンをすべて無視します。これにより、incrementToken()
がfalse
を返す前にreset()
が呼び出される可能性があります。ほとんどのTokenStream
実装ではこれで許容範囲であり、ストリーム全体を消費するよりも高速です。正常に機能するためにトークンのストリーム全体を使い切る必要があるTokenStream
をラップする場合は、consumeAllTokens="true"
オプションを使用してください。
ファクトリークラス: solr.LimitTokenPositionFilterFactory
引数
maxTokenPosition
-
必須
デフォルト: なし
トークンの最大位置。この制限に達すると、トークンは破棄されます。
consumeAllTokens
-
オプション
デフォルト:
false
最大開始オフセットに達した後、前のトークンフィルターのトークンを消費(および破棄)するかどうか。上記の説明を参照してください。
例
名前付き
<analyzer>
<tokenizer name="whitespace"/>
<filter name="limitTokenPosition" maxTokenPosition="3"
consumeAllTokens="false" />
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LimitTokenPositionFilterFactory" maxTokenPosition="3"
consumeAllTokens="false" />
</analyzer>
入力 "1 2 3 4 5"
トークナイザーからフィルターへ "1", "2", "3", "4", "5"
出力 "1", "2", "3"
小文字フィルター
トークン内の大文字を同等の小文字トークンに変換します。他のすべての文字は変更されません。
ファクトリークラス: solr.LowerCaseFilterFactory
引数: なし
例
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
入力: 「Down With CamelCase」
トークナイザーからフィルターへ: 「Down」、「With」、「CamelCase」
出力: 「down」、「with」、「camelcase」
管理されたストップフィルター
これは、ストップワードフィルターファクトリーの特殊バージョンで、REST APIから管理されるストップワードのセットを使用します。
引数
managed
-
必須
デフォルト: なし
管理されたREST APIでこのストップワードのセットに使用する必要がある名前。
例: この構成では、単語のセットは「english」という名前で、/solr/collection_name/schema/analysis/stopwords/english
を介して管理できます。
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="managedStop" managed="english"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedStopFilterFactory" managed="english"/>
</analyzer>
入出力例については、ストップフィルターを参照してください。
管理された同義語フィルター
これは、同義語フィルターの特殊バージョンで、REST APIから管理される同義語のマッピングを使用します。
管理された同義語フィルターは非推奨になりました
管理された同義語フィルターは、複数タームの同義語サポートに必要な管理された同義語グラフフィルターに置き換えられ、非推奨になりました。 |
ファクトリークラス: solr.ManagedSynonymFilterFactory
引数と例については、下記の同義語グラフフィルターを参照してください。
管理された同義語グラフフィルター
これは、Synonym Graph Filter の特殊バージョンであり、REST API から管理される同義語のマッピングを使用します。
このフィルターは、単一または複数のトークンの同義語をマッピングし、完全に正しいグラフ出力を生成します。このフィルターは、複数トークンの同義語に対して不正確なグラフを生成する、Managed Synonym Filter の代替となります。
このフィルターは正しいトークングラフを生成しますが、入力トークングラフを正しく消費することはできません。 |
引数
managed
-
必須
デフォルト: なし
マネージド REST API でこの同義語のマッピングに使用する必要がある名前。
例: この設定では、マッピングのセットは「english」と名付けられ、/solr/collection_name/schema/analysis/synonyms/english
を介して管理できます。
名前付き
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="managedSynonymGraph" managed="english"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="managedSynonymGraph" managed="english"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedSynonymGraphFilterFactory" managed="english"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ManagedSynonymGraphFilterFactory" managed="english"/>
</analyzer>
入出力の例については、以下の Synonym Graph Filter を参照してください。
MinHash Filter
ストリーム内のすべての入力トークンから、再現可能なランダムな固定数のハッシュトークンを生成します。これを行うために、まずソースからのすべての入力トークンを消費します。このフィルターは通常、以下の例に示すように、Shingle Filter が先行します。
各入力トークンはハッシュされます。その後、一連の事前計算されたハッシュと組み合わせることによって、hashCount
回「再ハッシュ」されます。結果として得られる各ハッシュについて、ハッシュ空間は bucketCount
個のバケットに分割されます。各バケットに対して、最小の hashSetSize
ハッシュのセット(通常は1つのセット)が生成されます。
このフィルターは、入力トークンの1種類の署名またはスケッチを生成し、ドキュメント間のジャッカード類似度を計算するために使用できます。
引数
hashCount
-
オプション
デフォルト:
1
使用するハッシュの数。
bucketCount
-
オプション
デフォルト:
512
使用するバケットの数。
hashSetSize
-
オプション
デフォルト:
1
各バケットからの最小ハッシュのセットのサイズ。
withRotation
-
オプション
デフォルト:説明を参照
ハッシュバケットが空の場合、値を持つ最初の前のバケットからハッシュ値を生成します。デフォルトは、
bucketCount
が1
より大きい場合はtrue
で、それ以外の場合はfalse
です。
生成されるハッシュの数は、上記のオプションによって異なります。withRotation
のデフォルト設定では、生成されるハッシュの数は hashCount
x bucketCount
x hashSetSize
⇒ デフォルトで 512 です。
例
名前付き
<analyzer>
<tokenizer name="icu"/>
<filter name="icuFolding"/>
<filter name="shingle" minShingleSize="5" outputUnigrams="false" outputUnigramsIfNoShingles="false" maxShingleSize="5" tokenSeparator=" "/>
<filter name="minHash" bucketCount="512" hashSetSize="1" hashCount="1"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.ICUTokenizerFactory"/>
<filter class="solr.ICUFoldingFilterFactory"/>
<filter class="solr.ShingleFilterFactory" minShingleSize="5" outputUnigrams="false" outputUnigramsIfNoShingles="false" maxShingleSize="5" tokenSeparator=" "/>
<filter class="org.apache.lucene.analysis.minhash.MinHashFilterFactory" bucketCount="512" hashSetSize="1" hashCount="1"/>
</analyzer>
入力: "woof woof woof woof woof"
トークナイザーからフィルターへ: "woof woof woof woof woof"
出力: "℁팽徭聙↝ꇁ홱杯", "℁팽徭聙↝ꇁ홱杯", "℁팽徭聙↝ꇁ홱杯", …. 合計 512 回
N-Gram Filter
指定された範囲のサイズの N グラムトークンを生成します。トークンは位置順に並べられ、次にグラムサイズ順に並べられることに注意してください。
ファクトリークラス: solr.NGramFilterFactory
引数
minGramSize
-
必須
デフォルト: なし
最小グラムサイズ。> 0である必要があります。
maxGramSize
-
必須
デフォルト: なし
最大グラムサイズ。
minGramSize
以上である必要があります。 preserveOriginal
-
オプション
デフォルト:
false
true
の場合、元の用語がminGramSize
より短い場合、またはmaxGramSize
より長い場合でも保持します。
例
デフォルトの動作。
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="1" maxGramSize="2"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="2"/>
</analyzer>
入力: "four score"
フィルターへのトークナイザー: "four", "score"
出力: "f", "o", "u", "r", "fo", "ou", "ur", "s", "c", "o", "r", "e", "sc", "co", "or", "re"
例
1から4の範囲。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="1" maxGramSize="4"/>
</analyzer>
入力: "four score"
フィルターへのトークナイザー: "four", "score"
出力: "f", "fo", "fou", "four", "o", "ou", "our", "u", "ur", "r", "s", "sc", "sco", "scor", "c", "co", "cor", "core", "o", "or", "ore", "r", "re", "e"
例
3 から 5 の範囲。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="3" maxGramSize="5"/>
</analyzer>
入力: "four score"
フィルターへのトークナイザー: "four", "score"
出力: "fou", "four", "our", "sco", "scor", "score", "cor", "core", "ore"
例
元の用語を保持します。
<analyzer>
<tokenizer name="standard"/>
<filter name="nGram" minGramSize="2" maxGramSize="3" preserveOriginal="true"/>
</analyzer>
入力: "four score"
フィルターへのトークナイザー: "four", "score"
出力: "fo", "fou", "ou", "our", "ur", "four", "sc", "sco", "co", "cor", "or", "ore", "re", "score"
Numeric Payload Token Filter
このフィルターは、指定されたタイプに一致するトークンに数値の浮動小数点ペイロード値を追加します。トークンタイプとペイロードの詳細については、org.apache.lucene.analysis.Token
クラスの Javadoc を参照してください。
ファクトリークラス: solr.NumericPayloadTokenFilterFactory
引数
payload
-
必須
デフォルト: なし
一致するすべてのトークンに追加される浮動小数点値。
typeMatch
-
必須
デフォルト: なし
トークンタイプの名前文字列。一致するタイプ名を持つトークンのペイロードは、上記の浮動小数点値に設定されます。
例
名前付き
<analyzer>
<tokenizer name="whitespace"/>
<filter name="numericPayload" payload="0.75" typeMatch="word"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.NumericPayloadTokenFilterFactory" payload="0.75" typeMatch="word"/>
</analyzer>
入力: "bing bang boom"
トークナイザーからフィルターへ: "bing", "bang", "boom"
出力: "bing"[0.75], "bang"[0.75], "boom"[0.75]
Pattern Replace Filter
このフィルターは、各トークンに正規表現を適用し、一致するものについては、一致したパターンの代わりに指定された置換文字列を代入します。一致しないトークンは変更されずに渡されます。
ファクトリークラス: solr.PatternReplaceFilterFactory
引数
pattern
-
必須
デフォルト: なし
java.util.regex.Pattern
に従って、各トークンに対してテストする正規表現。 replacement
-
必須
デフォルト: なし
一致したパターンの代わりに代入する文字列。この文字列には、正規表現パターンのキャプチャグループへの参照を含めることができます。
java.util.regex.Matcher
の Javadoc を参照してください。 replace
-
オプション
デフォルト:
all
トークン内のパターンのすべての出現箇所 (
all
) を置換するか、最初の出現箇所 (first
) のみを置換するかを示します。
例
単純な文字列置換
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="cat" replacement="dog"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PatternReplaceFilterFactory" pattern="cat" replacement="dog"/>
</analyzer>
入力: "cat concatenate catycat"
トークナイザーからフィルターへ: "cat", "concatenate", "catycat"
出力: "dog", "condogenate", "dogydog"
例
文字列置換、最初の出現箇所のみ
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="cat" replacement="dog" replace="first"/>
</analyzer>
入力: "cat concatenate catycat"
トークナイザーからフィルターへ: "cat", "concatenate", "catycat"
出力: "dog", "condogenate", "dogycat"
例
置換でキャプチャグループ参照を使用する、より複雑なパターン。数字以外の文字で始まり、数字で終わるトークンには、数字の前にアンダースコアが挿入されます。それ以外の場合、トークンはそのまま渡されます。
<analyzer>
<tokenizer name="standard"/>
<filter name="patternReplace" pattern="(\D+)(\d+)$" replacement="$1_$2"/>
</analyzer>
入力: "cat foo1234 9987 blah1234foo"
トークナイザーからフィルターへ: "cat", "foo1234", "9987", "blah1234foo"
出力: "cat", "foo_1234", "9987", "blah1234foo"
Phonetic Filter
このフィルターは、org.apache.commons.codec.language
パッケージの音響符号化アルゴリズムの1つを使用してトークンを作成します。詳細については、音響マッチングのセクションを参照してください。
ファクトリークラス: solr.PhoneticFilterFactory
引数
encoder
-
必須
デフォルト: なし
使用するエンコーダーの名前。エンコーダー名は、次のいずれかである必要があります(大文字と小文字を区別しない)。
inject
-
オプション
デフォルト:
true
true
の場合、新しい音響トークンがストリームに追加されます。それ以外の場合、トークンは音響相当物に置き換えられます。これをfalse
に設定すると、音響マッチングが有効になりますが、ターゲット単語の正確なスペルは一致しない場合があります。 maxCodeLength
-
オプション
デフォルト: なし
Metaphone または Double Metaphone エンコーダーによって生成されるコードの最大長。
例
DoubleMetaphone エンコードのデフォルトの動作。
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="DoubleMetaphone"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.PhoneticFilterFactory" encoder="DoubleMetaphone"/>
</analyzer>
入力: "four score and twenty"
トークナイザーからフィルターへ: "four"(1), "score"(2), "and"(3), "twenty"(4)
出力: "four"(1), "FR"(1), "score"(2), "SKR"(2), "and"(3), "ANT"(3), "twenty"(4), "TNT"(4)
音響トークンの位置増分は 0 であり、これは、それらが導出されたトークン(直前の)と同じ位置にあることを示します。
例
元のトークンを破棄します。
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="DoubleMetaphone" inject="false"/>
</analyzer>
入力: "four score and twenty"
トークナイザーからフィルターへ: "four"(1), "score"(2), "and"(3), "twenty"(4)
出力: "FR"(1), "SKR"(2), "ANT"(3), "TWNT"(4)
例
デフォルトの Soundex エンコーダー。
<analyzer>
<tokenizer name="standard"/>
<filter name="phonetic" encoder="Soundex"/>
</analyzer>
入力: "four score and twenty"
トークナイザーからフィルターへ: "four"(1), "score"(2), "and"(3), "twenty"(4)
出力: "four"(1), "F600"(1), "score"(2), "S600"(2), "and"(3), "A530"(3), "twenty"(4), "T530"(4)
Porter Stem Filter
このフィルターは、英語の Porter ステミングアルゴリズムを適用します。結果は、language="English"
引数を指定して Snowball Porter Stemmer を使用する場合と似ています。ただし、このステマーは Java で直接コーディングされており、Snowball に基づいていません。保護された単語のリストを受け入れず、英語のテキストにのみ適しています。ただし、英語 Snowball ステマーよりも4倍高速であるとベンチマークされているため、パフォーマンスを向上させることができます。
ファクトリークラス: solr.PorterStemFilterFactory
引数: なし
例
名前付き
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="porterStem"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory "/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
入力: 「jump jumping jumped」
トークナイザーからフィルターへ: 「jump」、「jumping」、「jumped」
出力: 「jump」、「jump」、「jump」
Protected Term Filter
このフィルターは、条件付きフィルタリングの一種を可能にします。保護されたセットに含まれていない用語にのみ、ラップされたフィルターを適用します。
ファクトリークラス: solr.ProtectedTermFilterFactory
引数
protected
-
必須
デフォルト: なし
保護された用語を含むファイルのカンマ区切りリスト(1行に1つ)。
wrappedFilters
-
必須
デフォルト: なし
TokenFilterFactory
SPI 名の大文字と小文字を区別しないカンマ区切りリスト(ファクトリー名から末尾の(Token)FilterFactory
を削除 -java.util.ServiceLoader interface
を参照)。各フィルター名は一意である必要があります。そのため、同じフィルターを複数回指定する必要がある場合は、各同じ SPI 名のフィルターに大文字と小文字を区別しない一意の-id
サフィックスを追加する必要があります(-id
サフィックスは SPI ルックアップの前に削除されることに注意してください)。 ignoreCase
-
オプション
デフォルト:
false
保護された単語をテストするときに、大文字と小文字を区別しない。
true
の場合、保護されたリストには小文字の単語が含まれている必要があります。
例
protectedTerms.txt
内の用語を除くすべての用語は、4文字に切り捨てられ、小文字に変換されます
名前付き
<analyzer>
<tokenizer name="whitespace"/>
<filter name="protectedTerm"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="truncate,lowercase"
truncate.prefixLength="4"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ProtectedTermFilterFactory"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="truncate,lowercase"
truncate.prefixLength="4"/>
</analyzer>
例
この例には、一意の -id
サフィックスを持つ複数の同じ名前のラップされたフィルターが含まれています。フィルター SPI 名と -id
サフィックスの両方が大文字と小文字を区別しないことに注意してください。
protectedTerms.txt
内の用語を除くすべての用語に対して、同義語が追加され、用語が反転され、次に反転された用語に対して同義語が追加されます
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="protectedTerm"
ignoreCase="true" protected="protectedTerms.txt"
wrappedFilters="SynonymGraph-fwd,ReverseString,SynonymGraph-rev"
synonymgraph-FWD.synonyms="fwd-syns.txt"
synonymgraph-REV.synonyms="rev-syns.txt"/>
</analyzer>
Remove Duplicates Token Filter
このフィルターは、ストリーム内の重複トークンを削除します。トークンは、テキストと位置の値が同じ場合にのみ、重複と見なされます。
位置が同じである必要があるため、このフィルターは、その名前に基づいてユーザーが期待する動作をしない可能性があります。非常に特殊なフィルターであり、非常に特定の状況でのみ役立ちます。誤解を招く可能性があるにもかかわらず、簡潔にするためにそのように名付けられています。
ファクトリークラス: solr.RemoveDuplicatesTokenFilterFactory
引数: なし
例
RemoveDuplicatesTokenFilterFactory
が役立つ1つの例は、ステマーと組み合わせて同義語ファイルが使用されている場合です。このような状況では、ステマーと同義語フィルターの両方が、まったく同じ位置を持つ完全に同一の用語をストリーム内に生成し、メリットなしにインデックスサイズを大きくする可能性があります。
synonyms.txt
ファイルの次のエントリを考慮してください
Television, Televisions, TV, TVs
次の構成で使用する場合
名前付き
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="synonyms.txt"/>
<filter name="englishMinimalStem"/>
<filter name="removeDuplicates"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt"/>
<filter class="solr.EnglishMinimalStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
入力: "Watch TV"
トークナイザーから同義語フィルターへ: "Watch"(1) "TV"(2)
同義語フィルターからステマーフィルターへ: "Watch"(1) "Television"(2) "Televisions"(2) "TV"(2) "TVs"(2)
ステマーフィルターから重複削除フィルターへ: "Watch"(1) "Television"(2) "Television"(2) "TV"(2) "TV"(2)
出力: "Watch"(1) "Television"(2) "TV"(2)
Reversed Wildcard Filter
このフィルターは、先頭ワイルドカードおよびプレフィックスクエリを高速化するためにトークンを反転します。ワイルドカードのないトークンは反転されません。
ファクトリークラス: solr.ReversedWildcardFilterFactory
引数
withOriginal
-
オプション
デフォルト:
true
true
の場合、フィルターは元のトークンと反転されたトークンの両方を同じ位置で生成します。false
の場合、反転されたトークンのみを生成します。 maxPosAsterisk
-
オプション
デフォルト:
2
クエリ用語の反転をトリガーするアスタリスクワイルドカード ('*') の最大位置。この値を超える位置にアスタリスクがある用語は反転されません。
maxPosQuestion
-
オプション
デフォルト:
1
クエリ用語の反転をトリガーする疑問符ワイルドカード ('?') の最大位置。純粋なサフィックスクエリ(先頭に単一のアスタリスクを持つクエリ)のみを反転するには、これを 0 に、
maxPosAsterisk
を 1 に設定します。 maxFractionAsterisk
-
オプション
デフォルト:
0.0
アスタリスク('*')の位置がクエリトークン長のこの割合より小さい場合に反転をトリガーする追加パラメータ。
minTrailing
-
オプション
デフォルト:
2
最後のワイルドカード文字の後のクエリトークン内の末尾文字の最小数。パフォーマンスを向上させるには、この値を
1
より大きい値に設定する必要があります。
例
名前付き
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="reversedWildcard" withOriginal="true"
maxPosAsterisk="2" maxPosQuestion="1" minTrailing="2" maxFractionAsterisk="0"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ReversedWildcardFilterFactory" withOriginal="true"
maxPosAsterisk="2" maxPosQuestion="1" minTrailing="2" maxFractionAsterisk="0"/>
</analyzer>
入力: "*foo *bar"
トークナイザーからフィルターへ: "*foo", "*bar"
出力: "oof*", "rab*"
Shingleフィルター
このフィルターは、トークンストリームからトークンnグラムであるシングルの構築を行います。トークンの連続を単一のトークンに結合します。
ファクトリークラス: solr.ShingleFilterFactory
引数
minShingleSize
-
オプション
デフォルト:
2
シングルあたりの最小トークン数。
2
以上である必要があります。 maxShingleSize
-
オプション
デフォルト:
2
シングルあたりの最大トークン数。
minShingleSize
以上である必要があります。 outputUnigrams
-
オプション
デフォルト:
true
true
の場合、個々のトークンも元の位置に含められます。 outputUnigramsIfNoShingles
-
オプション
デフォルト:
false
true
の場合、シングルが生成できない場合は個々のトークンが出力されます。 tokenSeparator
-
オプション
デフォルト: スペース文字
隣接するトークンを結合してシングルを形成する際に使用する文字列。
fillerToken
-
オプション
デフォルト:
_
(アンダースコア)位置の増分を保持するために削除されたストップワードを埋めるために使用される文字。
例
デフォルトの動作。
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="shingle"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory"/>
</analyzer>
入力: "To be, or what?"
トークナイザーからフィルターへ: "To"(1), "be"(2), "or"(3), "what"(4)
出力: "To"(1), "To be"(1), "be"(2), "be or"(2), "or"(3), "or what"(3), "what"(4)
例
シングルサイズが4で、元のトークンを含めない場合。
<analyzer>
<tokenizer name="standard"/>
<filter name="shingle" maxShingleSize="4" outputUnigrams="false"/>
</analyzer>
入力: "To be, or not to be."
トークナイザーからフィルターへ: "To"(1), "be"(2), "or"(3), "not"(4), "to"(5), "be"(6)
出力: "To be"(1), "To be or"(1), "To be or not"(1), "be or"(2), "be or not"(2), "be or not to"(2), "or not"(3), "or not to"(3), "or not to be"(3), "not to"(4), "not to be"(4), "to be"(5)
Snowball Porter Stemmerフィルター
このフィルターファクトリーは、Snowballによって生成された言語固有のステマーをインスタンス化します。Snowballは、パターンベースの単語ステマーを生成するソフトウェアパッケージです。このタイプのステマーは、テーブルベースのステマーほど正確ではありませんが、高速で複雑さが軽減されます。テーブル駆動型ステマーの作成と保守には多大な労力がかかるため、通常は商用製品です。
Solrには、アルメニア語、バスク語、カタロニア語、デンマーク語、オランダ語、英語、フィンランド語、フランス語、ドイツ語、ハンガリー語、イタリア語、ノルウェー語、ポルトガル語、ルーマニア語、ロシア語、スペイン語、スウェーデン語、トルコ語のSnowballステマーが含まれています。Snowballの詳細については、http://snowball.tartarus.org/をご覧ください。
StopFilterFactory
、CommonGramsFilterFactory
、およびCommonGramsQueryFilterFactory
は、オプションでSnowball形式のストップワードを読み取ることができます(これらのFilterFactoryの構成でformat="snowball"
を指定します)。
ファクトリークラス: solr.SnowballPorterFilterFactory
引数
language
-
オプション
デフォルト:
English
使用する適切なPorterステマーを選択するために使用される言語の名前。大文字と小文字が区別されます。この文字列は、
org.tartarus.snowball.ext
クラス階層内のパッケージ名を選択するために使用されます。 protected
-
必須
デフォルト:
protected
1行に1つずつ、保護された単語のリストを含むテキストファイルへのパス。保護された単語はステミングされません。空白行と
\#
で始まる行は無視されます。これは絶対パス、またはSolrconf
ディレクトリ内の単純なファイル名にすることができます。
例
デフォルトの動作
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SnowballPorterFilterFactory"/>
</analyzer>
入力: "flip flipped flipping"
トークナイザーからフィルターへ: "flip", "flipped", "flipping"
出力: "flip", "flip", "flip"
例
フランス語のステマー、英語の単語
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter" language="French"/>
</analyzer>
入力: "flip flipped flipping"
トークナイザーからフィルターへ: "flip", "flipped", "flipping"
出力: "flip", "flipped", "flipping"
例
スペイン語のステマー、スペイン語の単語
<analyzer>
<tokenizer name="standard"/>
<filter name="snowballPorter" language="Spanish"/>
</analyzer>
入力: "cante canta"
トークナイザーからフィルターへ: "cante", "canta"
出力: "cant", "cant"
ストップフィルター
このフィルターは、指定されたストップワードリストに含まれるトークンを破棄するか、分析を停止します。標準のストップワードリストは、Solr conf
ディレクトリにstopwords.txt
という名前で含まれており、これは典型的な英語テキストに適しています。
ファクトリークラス: solr.StopFilterFactory
引数
words
-
オプション
デフォルト: なし
1行に1つずつ、ストップワードのリストを含むファイルへのパス。空白行と
\#
で始まる行は無視されます。これは絶対パス、またはSolrconf
ディレクトリからの相対パスにすることができます。 format
-
オプション
デフォルト: なし
ストップワードリストがSnowball用にフォーマットされている場合は、
format="snowball"
を指定して、Solrがストップワードファイルを読み取れるようにすることができます。 ignoreCase
-
オプション
デフォルト:
false
ストップワードのテスト時に大文字と小文字を区別しません。
true
の場合、ストップリストには小文字の単語が含まれている必要があります。
例
大文字と小文字を区別するマッチング、大文字で始まる単語は停止しません。トークンの位置はストップワードをスキップします。
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="stop" words="stopwords.txt"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" words="stopwords.txt"/>
</analyzer>
入力: "To be or what?"
トークナイザーからフィルターへ: "To"(1), "be"(2), "or"(3), "what"(4)
出力: "To"(1), "what"(4)
例
<analyzer>
<tokenizer name="standard"/>
<filter name="stop" words="stopwords.txt" ignoreCase="true"/>
</analyzer>
入力: "To be or what?"
トークナイザーからフィルターへ: "To"(1), "be"(2), "or"(3), "what"(4)
出力: "what"(4)
Suggest Stopフィルター
ストップフィルターと同様に、このフィルターは、指定されたストップワードリストに含まれるトークンを破棄するか、分析を停止します。
Suggest Stopフィルターは、ストップフィルターとは異なり、最後のトークンがトークン区切り文字で続かない限り、削除しません。たとえば、クエリ"find the"
は、スペース、句読点などで区切られていないため、'the'
を保持し、後続のフィルターが変更または削除しないようにKEYWORD
としてマークします。
対照的に、「find the popsicle」のようなクエリは、スペースが続くため、‘the’をストップワードとして削除します。いずれかの分析サジェスターを使用する場合、通常はインデックスアナライザーで通常のStopFilterFactory
を使用し、クエリアナライザーでSuggestStopFilterを使用します。
ファクトリークラス: solr.SuggestStopFilterFactory
引数
words
-
オプション
解析するストップワードファイルの名前。
format
-
オプション
デフォルト:
wordset
単語ファイルの解析方法を定義します。
words
が指定されていない場合、format
は指定しないでください。format
パラメーターの有効な値は次のとおりです。-
wordset
:1行に1つの単語(単語内の空白を含む)をサポートし、\#
文字で始まる行全体のコメントを許可します。空白行は無視されます。 -
snowball
:各行に複数の単語を指定でき、縦線(|
)を使用して末尾のコメントを指定できます。空白行は無視されます。
-
ignoreCase
-
オプション
デフォルト:
false
true
の場合、マッチングは大文字と小文字を区別しません。
例
名前付き
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="lowercase"/>
<filter name="suggestStop" ignoreCase="true"
words="stopwords.txt" format="wordset"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SuggestStopFilterFactory" ignoreCase="true"
words="stopwords.txt" format="wordset"/>
</analyzer>
入力: "The The"
トークナイザーからフィルターへ: "the"(1), "the"(2)
出力: "the"(2)
Synonymフィルター
このフィルターは、同義語のマッピングを行います。各トークンは同義語のリストで検索され、一致が見つかった場合、同義語がトークンの代わりに発行されます。新しいトークンの位置の値は、すべて元のトークンと同じ位置になるように設定されます。
Synonymフィルターは非推奨になりました
Synonymフィルターは、複数タームの同義語のサポートに必要なSynonym Graphフィルターに置き換えられて非推奨になりました。 |
ファクトリークラス: solr.SynonymFilterFactory
引数と例については、以下のSynonym Graphフィルターを参照してください。
Synonym Graphフィルター
このフィルターは、単一または複数のトークンの同義語をマッピングし、完全に正しいグラフ出力を生成します。このフィルターは、複数トークンの同義語に対して誤ったグラフを生成するSynonymフィルターの代替です。
インデックス作成中にこのフィルターを使用する場合は、インデクサーがグラフを直接使用できないため、Synonymフィルターのように相互に重なり合ったトークンを圧縮するために、Flatten Graphフィルターを後に続く必要があります。同義語の置換が複数のトークンである場合に、完全に正しい位置クエリを取得するには、代わりにクエリ時にこのフィルターを使用して同義語を適用する必要があります。
このフィルターは正しいトークングラフを生成しますが、入力トークングラフを正しく消費することはできません。 |
ファクトリークラス: solr.SynonymGraphFilterFactory
引数
synonyms
-
必須
デフォルト: なし
1行に1つずつ、同義語のリストを含むファイルへのパス。(デフォルトの)
solr
形式では - 代替については以下のformat
引数を参照してください - 空白行と\#
で始まる行は無視されます。これは、パスのカンマ区切りリストにすることができます。詳細については、リソースのロードを参照してください。同義語マッピングを指定する方法は2つあります。
-
単語のカンマ区切りリスト。トークンが単語のいずれかに一致する場合、リスト内のすべての単語が代入されます。これには元のトークンが含まれます。
-
「=>」記号で区切られた2つの単語のカンマ区切りリスト。トークンが左側のいずれかの単語と一致する場合、右側のリストが代入されます。元のトークンが右側のリストにも含まれていない限り、元のトークンは含まれません。
-
ignoreCase
-
オプション
デフォルト:
false
true
の場合、同義語は、大文字と小文字を区別せずにマッチングされます。 expand
-
オプション
デフォルト:
true
true
の場合、同義語はすべての同等の同義語に拡張されます。false
の場合、同等の同義語はすべてリストの最初に削減されます。 format
-
オプション
デフォルト:
solr
同義語の解析方法を制御します。短い名前
solr
(SolrSynonymParser
用)およびwordnet
(WordnetSynonymParser
用)がサポートされています。または、独自のSynonymMap.Builder
サブクラスの名前を指定することもできます。 tokenizerFactory
-
オプション
デフォルト:
WhitespaceTokenizerFactory
同義語ファイルを解析するときに使用するトークナイザーファクトリーの名前。
tokenizerFactory.*
の名前プレフィックスを持つ引数は、指定されたトークナイザーファクトリーへの初期化パラメーターとして提供されます。tokenizerFactory.*
プレフィックスを持たないものを含む、同義語フィルターファクトリーによって消費されない引数も、トークナイザーファクトリーへの初期化パラメーターとして提供されます。tokenizerFactory
が指定されている場合、analyzer
は指定できず、その逆も同様です。 analyzer
-
オプション
デフォルト:
WhitespaceTokenizerFactory
同義語ファイルを解析するときに使用するアナライザークラスの名前。
analyzer
が指定されている場合、tokenizerFactory
は指定できず、その逆も同様です。
次の例では、mysynonyms.txt
という名前の同義語ファイルを使用すると想定しています。
couch,sofa,divan
teh => the
huge,ginormous,humungous => large
small => tiny,teeny,weeny
例
名前付き
<analyzer type="index">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="mysynonyms.txt"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="mysynonyms.txt"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="mysynonyms.txt"/>
</analyzer>
入力: "teh small couch"
トークナイザーからフィルターへ: "teh"(1), "small"(2), "couch"(3)
出力: "the"(1), "tiny"(2), "teeny"(2), "weeny"(2), "couch"(3), "sofa"(3), "divan"(3)
例
入力: "teh ginormous, humungous sofa"
トークナイザーからフィルターへ: "teh"(1), "ginormous"(2), "humungous"(3), "sofa"(4)
出力: "the"(1), "large"(2), "large"(3), "couch"(4), "sofa"(4), "divan"(4)
重み付き同義語
DelimitedBoostFilter を Synonym Graph Filter と組み合わせることで、クエリ時に重み付き同義語を実現できます。詳細については、以下を参照してください: https://sease.io/2020/03/introducing-weighted-synonyms-in-apache-lucene.html 次の例では、boostedSynonyms.txt
という名前の同義語ファイルがあると仮定します。
leopard, big cat|0.8, bagheera|0.9, panthera pardus|0.85
lion => panthera leo|0.9, simba|0.8, kimba|0.75
例
名前付き
<analyzer type="query">
<tokenizer name="standard"/>
<filter name="synonymGraph" synonyms="boostedSynonyms.txt"/>
<filter name="delimitedBoost"/>
</analyzer>
入力: "lion"
トークナイザーからフィルターへ: "lion"(1)
出力: "panthera"(1), "leo"(2)[0.9], "simba"(1)[0.8], "kimba"(1)[0.75]
トークンオフセットペイロードフィルター
このフィルターは、トークンの数値文字オフセットをそのトークンのペイロード値として追加します。
ファクトリークラス: solr.TokenOffsetPayloadTokenFilterFactory
引数: なし
例
名前付き
<analyzer>
<tokenizer name="whitespace"/>
<filter name="tokenOffsetPayload"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.TokenOffsetPayloadTokenFilterFactory"/>
</analyzer>
入力: "bing bang boom"
トークナイザーからフィルターへ: "bing", "bang", "boom"
出力: "bing"[0,4], "bang"[5,9], "boom"[10,14]
トリムフィルター
このフィルターは、トークンの先頭および/または末尾の空白をトリムします。ほとんどのトークナイザーは空白でトークンを分割するため、このフィルターは特別な状況で最もよく使用されます。
ファクトリークラス: solr.TrimFilterFactory
引数: なし
例
ここで使用される PatternTokenizerFactory の構成は、単純なコンマで入力を分割しますが、空白は削除しません。
名前付き
<analyzer>
<tokenizer name="pattern" pattern=","/>
<filter name="trim"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern=","/>
<filter class="solr.TrimFilterFactory"/>
</analyzer>
入力: "one, two , three ,four "
トークナイザーからフィルターへ: "one", " two ", " three ", "four "
出力: "one", "two", "three", "four"
タイプをペイロードフィルターとして扱う
このフィルターは、トークンのタイプをエンコードされたバイトシーケンスとしてペイロードに追加します。
ファクトリークラス: solr.TypeAsPayloadTokenFilterFactory
引数: なし
例
名前付き
<analyzer>
<tokenizer name="whitespace"/>
<filter name="typeAsPayload"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.TypeAsPayloadTokenFilterFactory"/>
</analyzer>
入力: "Pay Bob’s I.O.U."
トークナイザーからフィルターへ: "Pay", "Bob’s", "I.O.U."
出力: "Pay"[<ALPHANUM>], "Bob’s"[<APOSTROPHE>], "I.O.U."[<ACRONYM>]
タイプを同義語フィルターとして扱う
このフィルターは、トークンのタイプを、必要に応じて設定可能なプレフィックスを付加して、トークンと同じ位置にトークンとして追加します。
ファクトリークラス: solr.TypeAsSynonymFilterFactory
引数
プレフィックス
-
オプション
デフォルト: なし
トークンのタイプに付加するプレフィックス。
無視
-
オプション
デフォルト: なし
無視して同義語に変換しないタイプのカンマ区切りリスト。
synFlagsMask
-
オプション
デフォルト: 説明を参照
同義語にどのフラグを伝播させるかを制御するためのマスク(整数として提供)。デフォルト値は整数
-1
、つまりマスク0xFFFFFFFF
です。このマスクは、すべてのフラグをそのまま伝播させます。
例
以下の例では、各トークンのタイプが同じ位置にそのまま出力されます
名前付き
<analyzer>
<tokenizer name="standard"/>
<filter name="typeAsSynonym"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.TypeAsSynonymFilterFactory"/>
</analyzer>
以下の例では、タイプが <URL>
のトークン "example.com" に対して、同じ位置に出力されるトークンは "_type_<URL>" になります
名前付き
<analyzer>
<tokenizer name="uax29URLEmail"/>
<filter name="typeAsSynonym" prefix="_type_"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<tokenizer class="solr.UAX29URLEmailTokenizerFactory"/>
<filter class="solr.TypeAsSynonymFilterFactory" prefix="_type_"/>
</analyzer>
タイプトークンフィルター
このフィルターは、トークンにタイプメタデータが関連付けられていると仮定して、指定されたトークンタイプのリストを許可または拒否します。たとえば、UAX29 URL Email Tokenizer は、他のタイプに加えて、"<URL>" および "<EMAIL>" というタイプ付きトークンを出力します。このフィルターを使用すると、必要に応じてテキストから電子メールアドレスのみをトークンとして抽出できます。
ファクトリークラス: solr.TypeTokenFilterFactory
引数
タイプ
-
必須
デフォルト: なし
フィルターするタイプのファイルへのパスを定義します。
useWhitelist
-
オプション
デフォルト:
false
true
の場合、types
で定義されたファイルはインクルードリストとして使用されます。false
または未定義の場合、types
で定義されたファイルはデナイリストとして使用されます。
例
名前付き
<analyzer>
<filter name="typeToken" types="stoptypes.txt" useWhitelist="true"/>
</analyzer>
クラス名付き (レガシー)
<analyzer>
<filter class="solr.TypeTokenFilterFactory" types="stoptypes.txt" useWhitelist="true"/>
</analyzer>
ワード区切りフィルター
このフィルターは、単語区切り文字でトークンを分割します。
ワード区切りフィルターは非推奨になりました
ワード区切りフィルターは非推奨となり、ワード区切りグラフフィルターが推奨されます。これは、たとえば、フレーズクエリが正しく機能するために正しいトークングラフを生成するために必要です。 |
ファクトリークラス: solr.WordDelimiterFilterFactory
引数と例を含む完全な説明については、以下のワード区切りグラフフィルターを参照してください。
ワード区切りグラフフィルター
このフィルターは、単語区切り文字でトークンを分割します。
インデックス作成中にこのフィルターを使用する場合、インデクサーがグラフを直接消費できないため、ワード区切りフィルターのようにトークンを互いに重ね合わせるために、その後にフラットグラフフィルターを続ける必要があります。トークンが分割されるときに完全に正しい位置クエリを取得するには、代わりにクエリ時にこのフィルターを使用する必要があります。
注: このフィルターは正しいトークングラフを生成しますが、入力トークングラフを正しく消費することはできません。
区切り文字を決定するためのルールは、次のように決定されます
-
単語内の大文字小文字の変更: "CamelCase" → "Camel", "Case"。これは、
splitOnCaseChange="0"
を設定することで無効にできます。 -
アルファ文字から数字文字への、またはその逆の遷移: "Gonzo5000" → "Gonzo", "5000" "4500XL" → "4500", "XL"。これは、
splitOnNumerics="0"
を設定することで無効にできます。 -
英数字以外の文字 (破棄): "hot-spot" → "hot", "spot"
-
末尾の "'s" が削除されます: "O’Reilly’s" → "O", "Reilly"
-
先頭または末尾の区切り文字はすべて破棄されます: "--hot-spot--" → "hot", "spot"
ファクトリークラス: solr.WordDelimiterGraphFilterFactory
引数
generateWordParts
-
オプション
デフォルト:
1
ゼロ以外の場合、区切り文字で単語を分割します。例: "CamelCase", "hot-spot" → "Camel", "Case", "hot", "spot"
generateNumberParts
-
オプション
デフォルト:
1
ゼロ以外の場合、区切り文字で数値文字列を分割します: "1947-32" → *"1947", "32"
splitOnCaseChange
-
オプション
デフォルト:
1
0
の場合、単語は大文字と小文字の変更で分割されません: "BugBlaster-XL" → "BugBlaster", "XL"。以下の例 1 は、デフォルトの(ゼロ以外の)分割動作を示しています。 splitOnNumerics
-
オプション
デフォルト:
1
0
の場合、アルファ文字から数字への遷移で単語を分割しないでください: "FemBot3000" → "Fem", "Bot3000" catenateWords
-
オプション
デフォルト:
0
ゼロ以外の場合、単語部分の最大実行数が結合されます: "hot-spot-sensor’s" → "hotspotsensor"
catenateNumbers
-
オプション
デフォルト:
0
ゼロ以外の場合、数値部分の最大実行数が結合されます: 1947-32" → "194732"
catenateAll
-
オプション
デフォルト:
0
ゼロ以外の場合、単語部分と数値部分の実行数が結合されます: "Zap-Master-9000" → "ZapMaster9000"
preserveOriginal
-
オプション
デフォルト:
0
ゼロ以外の場合、元のトークンが保持されます: "Zap-Master-9000" → "Zap-Master-9000", "Zap", "Master", "9000"
protected
-
オプション
デフォルト: なし
分割せずに通過させる保護された単語のリストを含むファイルへのパス。
stemEnglishPossessive
-
オプション
デフォルト:
1
1
の場合、各サブワードから所有格's
を削除します。 adjustOffsets
-
オプション
デフォルト:
true
true
の場合、部分的な用語のオフセットが調整されます。 タイプ
-
オプション
デフォルト: なし
このフィルターの分割動作のカスタマイズを可能にする文字 => タイプマッピングを含むファイルへのパス。認識される文字タイプ:
LOWER
,UPPER
,ALPHA
,DIGIT
,ALPHANUM
, およびSUBWORD_DELIM
。カスタマイズされたマッピングのない文字のデフォルトは、Unicode文字プロパティから計算されます。空白行と '#' で始まるコメント行は無視されます。ファイルの例
# Don't split numbers at '$', '.' or ',' $ => DIGIT . => DIGIT \u002C => DIGIT # Don't split on ZWJ: https://en.wikipedia.org/wiki/Zero-width_joiner \u200D => ALPHANUM
例
デフォルトの動作。ここでは、空白トークナイザーを使用して、英数字以外の文字を保持します。
名前付き
<analyzer type="index">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph"/>
<filter name="flattenGraph"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph"/>
</analyzer>
クラス名付き (レガシー)
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory"/>
<filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterGraphFilterFactory"/>
</analyzer>
入力: "hot-spot RoboBlaster/9000 100XL"
トークナイザーからフィルターへ: "hot-spot", "RoboBlaster/9000", "100XL"
出力: "hot", "spot", "Robo", "Blaster", "9000", "100", "XL"
例
大文字と小文字の変更で分割せず、数値部分を生成しないでください。数値部分のみを含むトークンは、最終的に破棄されることに注意してください。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" generateNumberParts="0" splitOnCaseChange="0"/>
</analyzer>
入力: "hot-spot RoboBlaster/9000 100-42"
トークナイザーからフィルターへ: "hot-spot", "RoboBlaster/9000", "100-42"
出力: "hot", "spot", "RoboBlaster", "9000"
例
単語部分と数値部分を連結しますが、同じトークン内に発生する単語部分と数値部分は連結しません。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" catenateWords="1" catenateNumbers="1"/>
</analyzer>
入力: "hot-spot 100+42 XL40"
トークナイザーからフィルターへ: "hot-spot"(1), "100+42"(2), "XL40"(3)
出力: "hot"(1), "spot"(2), "hotspot"(2), "100"(3), "42"(4), "10042"(4), "XL"(5), "40"(6)
例
すべて連結します。単語および/または数値部分が結合されます。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" catenateAll="1"/>
</analyzer>
入力: "XL-4000/ES"
トークナイザーからフィルターへ: "XL-4000/ES"(1)
出力: "XL"(1), "4000"(2), "ES"(3), "XL4000ES"(3)
例
"AstroBlaster" および "XL-5000" (その他) を含む保護された単語リストを使用します。
<analyzer type="query">
<tokenizer name="whitespace"/>
<filter name="wordDelimiterGraph" protected="protwords.txt"/>
</analyzer>
入力: "FooBar AstroBlaster XL-5000 ==ES-34-"
トークナイザーからフィルターへ: "FooBar", "AstroBlaster", "XL-5000", "==ES-34-"
出力: "FooBar", "FooBar", "AstroBlaster", "XL-5000", "ES", "34"