フィルター

フィルターは、トークンのストリームを調べて、使用されているフィルターの種類に応じて、それらを保持、変換、または破棄します。

フィルターについて

トークナイザーと同様に、フィルターは入力を消費し、トークンのストリームを生成します。フィルターも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 ブロックの文字を変換します

ファクトリークラス: 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

名前の種類。有効な値は、GENERICASHKENAZI、または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

正規化形式の名前。有効なオプションは、nfcnfdnfkcnfkd、または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

オプション

デフォルト:説明を参照

ハッシュバケットが空の場合、値を持つ最初の前のバケットからハッシュ値を生成します。デフォルトは、bucketCount1 より大きい場合は 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/をご覧ください。

StopFilterFactoryCommonGramsFilterFactory、およびCommonGramsQueryFilterFactoryは、オプションでSnowball形式のストップワードを読み取ることができます(これらのFilterFactoryの構成でformat="snowball"を指定します)。

ファクトリークラス: solr.SnowballPorterFilterFactory

引数

language

オプション

デフォルト: English

使用する適切なPorterステマーを選択するために使用される言語の名前。大文字と小文字が区別されます。この文字列は、org.tartarus.snowball.extクラス階層内のパッケージ名を選択するために使用されます。

protected

必須

デフォルト: protected

1行に1つずつ、保護された単語のリストを含むテキストファイルへのパス。保護された単語はステミングされません。空白行と\#で始まる行は無視されます。これは絶対パス、またはSolr confディレクトリ内の単純なファイル名にすることができます。

デフォルトの動作

名前付き

<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つずつ、ストップワードのリストを含むファイルへのパス。空白行と\#で始まる行は無視されます。これは絶対パス、またはSolr confディレクトリからの相対パスにすることができます。

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

オプション

デフォルト: StopAnalyzer#ENGLISH_STOP_WORDS_SET

解析するストップワードファイルの名前。

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

同義語の解析方法を制御します。短い名前solrSolrSynonymParser用)およびwordnetWordnetSynonymParser用)がサポートされています。または、独自の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"