言語解析

このセクションでは、文字セット変換関連のトークナイザとフィルタ、または特定の言語で使用するためのトークナイザとフィルタに関する情報を記載しています。

ヨーロッパの言語では、トークン化は比較的簡単です。トークンは空白文字と/または比較的少ない数の句読点文字によって区切られます。

その他の言語では、トークン化ルールはしばしばそれほど単純ではありません。一部のヨーロッパの言語でも、ドイツ語の複合語を分解するためのルールなど、特別なトークン化ルールが必要になる場合があります。

インデックス作成時の言語検出については、言語検出を参照してください。

KeywordMarkerFilterFactory

ステマーによる単語の変更を防ぎます。スキーマの「protected」属性を使用して、カスタマイズされた保護された単語リストを指定できます。保護された単語リスト内の単語は、Solr のステマーによって変更されません。

コメント付きの Solr `protwords.txt` のサンプルは、`sample_techproducts_configs` configset ディレクトリにあります。

名前付き

<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer name="whitespace"/>
    <filter name="keywordMarker" protected="protwords.txt" />
    <filter name="porterStem" />
  </analyzer>
</fieldtype>

クラス名付き(レガシー)

<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" />
    <filter class="solr.PorterStemFilterFactory" />
  </analyzer>
</fieldtype>

KeywordRepeatFilterFactory

各トークンを2回出力します。1つは `KEYWORD` 属性付き、もう1つはなしです。

ステマーの前に配置すると、ステミングされたものと同じ位置にステミングされていないトークンが保存されます。元の正確な用語に一致するクエリは、ステミングによる再現率のメリットを維持しながら、より高いスコアを取得します。元のトークンを保持するもう1つの利点は、ワイルドカードの切り詰めが期待どおりに機能することです。

設定するには、分析チェーンの先頭に `KeywordRepeatFilterFactory` を追加します。トークンがステミングされない場合の重複を避けるために、`RemoveDuplicatesTokenFilterFactory` も含めることをお勧めします。

フィールドタイプのサンプル設定は次のようになります。

名前付き

<fieldtype name="english_stem_preserve_original" class="solr.TextField">
  <analyzer>
    <tokenizer name="standard"/>
    <filter name="keywordRepeat" />
    <filter name="porterStem" />
    <filter name="removeDuplicates" />
  </analyzer>
</fieldtype>

クラス名付き(レガシー)

<fieldtype name="english_stem_preserve_original" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.KeywordRepeatFilterFactory" />
    <filter class="solr.PorterStemFilterFactory" />
    <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
  </analyzer>
</fieldtype>
同じトークンを2回追加すると、スコアも2倍になります。そのため、ランキングルールを調整し直す必要がある場合があります。

StemmerOverrideFilterFactory

カスタムマッピングを適用し、これらの用語がステマーによって変更されないようにすることで、ステミングアルゴリズムをオーバーライドします。

タブ区切りファイル内の単語と語幹の対応付けをカスタマイズして、スキーマのdictionary属性に指定することができます。この対応付け内の単語は、ファイルからの語幹に還元され、それ以降はどのステミング処理によっても変更されません。

名前付き

<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer name="whitespace"/>
    <filter name="stemmerOverride" dictionary="stemdict.txt" />
    <filter name="porterStem" />
  </analyzer>
</fieldtype>

クラス名付き(レガシー)

<fieldtype name="myfieldtype" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" />
    <filter class="solr.PorterStemFilterFactory" />
  </analyzer>
</fieldtype>

サンプルのstemdict.txtファイルは下記のとおりです。

# these must be tab-separated
monkeys	monkey
otters	otter
# some crazy ones that a stemmer would never do
dogs	cat

ローカルにSolrのソースコードをチェックアウトしている場合は、Solrのテストリソースのsolr/core/src/test-files/solr/collection1/conf/stemdict.txtにもこの例があります。

辞書複合語トークンフィルタ

このフィルタは、構成要素の単語の辞書を使用して、複合語を個々の単語に分割します(分解します)。各入力トークンは変更されずに渡されます。部分単語に分解できる場合、各部分単語も論理的に同じ位置にストリームに追加されます。

複合語は、ゲルマン語族の言語で最も一般的に見られます。

ファクトリクラス: solr.DictionaryCompoundWordTokenFilterFactory

引数

dictionary

必須

デフォルト: なし

シンプルな単語のリストを1行に1つずつ含むファイルのパス。空行と「#」で始まる行は無視されます。

詳細はリソースの読み込みを参照してください。

minWordSize

オプション

デフォルト: 5

これよりも短いトークンは分解されません。

minSubwordSize

オプション

デフォルト: 2

これよりも短い部分単語はトークンとして出力されません。

maxSubwordSize

オプション

デフォルト: 15

これよりも長い部分単語はトークンとして出力されません。

onlyLongestMatch

オプション

デフォルト: true

trueの場合、最も長い一致する部分単語のみが新しいトークンを生成します。

germanwords.txtに少なくとも次の単語が含まれていると仮定します: dumm kopf donau dampf schiff

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="dictionaryCompoundWord" dictionary="germanwords.txt"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.DictionaryCompoundWordTokenFilterFactory" dictionary="germanwords.txt"/>
</analyzer>

入力: "Donaudampfschiff dummkopf"

フィルタへのトークナイザ: "Donaudampfschiff"(1), "dummkopf"(2),

出力: "Donaudampfschiff"(1), "Donau"(1), "dampf"(1), "schiff"(1), "dummkopf"(2), "dumm"(2), "kopf"(2)

Unicode照合

Unicode照合は、言語に依存したテキストのソート方法であり、高度な検索にも使用できます。

SolrにおけるUnicode照合は高速です。すべての処理がインデックス作成時に実行されるためです。

<fieldtype …​ class="solr.TextField">内でアナライザを指定する代わりに、solr.CollationFieldおよびsolr.ICUCollationFieldフィールドタイプクラスがこの機能を提供します。solr.ICUCollationFieldICU4Jライブラリを基盤としており、より柔軟な設定が可能で、より多くのロケールに対応し、大幅に高速で、メモリとインデックス空間の使用量も少なくなります(キーがsolr.CollationFieldを基盤とするJDK実装によって生成されるキーよりも小さいためです)。

solr.ICUCollationFieldを使用するには、analysis-extrasモジュールを有効にする必要があります。

solr.ICUCollationFieldおよびsolr.CollationFieldフィールドは、2つの方法で作成できます。

  • ロケールに関連付けられたシステムコレクターに基づいて。

  • 調整されたRuleBasedCollatorルールセットに基づいて。

ICUCollationField属性

システムコレクターの使用

locale

必須

デフォルト: なし

RFC 3066ロケールID。

strength

オプション

デフォルト: なし

有効な値はprimarysecondarytertiaryquaternary、またはidenticalです。ICU照合の概念における比較レベルの詳細については、こちらを参照してください。

decomposition

オプション

デフォルト: なし

有効な値はnoまたはcanonicalです。ICU照合の概念における正規化の詳細については、こちらを参照してください。

調整されたルールセットの使用

custom

必須

デフォルト: なし

ICU RuleBasedCollatorでサポートされているルールを含むUTF-8テキストファイルへのパス。

strength

オプション

デフォルト: なし

有効な値はprimarysecondarytertiaryquaternary、またはidenticalです。ICU照合の概念における比較レベルの詳細については、こちらを参照してください。

decomposition

オプション

デフォルト: なし

有効な値はnoまたはcanonicalです。ICU照合の概念における正規化の詳細については、こちらを参照してください。

専門家向けオプション

alternate

オプション

デフォルト: なし

有効な値はshiftedまたはnon-ignorableです。句読点または空白を無視するために使用できます。

caseLevel

オプション

デフォルト: false

trueの場合、strength="primary"と組み合わせて使用すると、アクセントは無視されますが、大文字と小文字は考慮されます。ICU照合の概念におけるcaseLevelの詳細については、こちらを参照してください。

caseFirst

オプション

デフォルト: なし

有効な値はlowerまたはupperです。大文字と小文字が無視されない場合、どちらを先にソートするかを制御するために役立ちます。

numeric

オプション

デフォルト: false

trueの場合、数字は数値に従ってソートされます(例: foobar-9はfoobar-10の前にソートされます)。

variableTop

オプション

デフォルト: なし

単一文字または短縮形。alternateに対して可変となるものを制御します。

特定の言語のテキストのソート

この例では、ICU4Jによって提供されるデフォルトのドイツ語ルールに従ってテキストがソートされます。

ロケールは通常、言語と国の組み合わせとして定義されますが、必要に応じて言語のみを指定することもできます。たとえば、言語として「de」を指定すると、ドイツ語でうまく機能するソートが得られます。言語として「de」を、国として「CH」を指定すると、スイス向けのドイツ語ソートが得られます。

<!-- Define a field type for German collation -->
<fieldType name="collatedGERMAN" class="solr.ICUCollationField"
           locale="de"
           strength="primary" />
...
<!-- Define a field to store the German collated manufacturer names. -->
<field name="manuGERMAN" type="collatedGERMAN" indexed="false" stored="false" docValues="true"/>
...
<!-- Copy the text to this field. We could create French, English, Spanish versions too,
     and sort differently for different users! -->
<copyField source="manu" dest="manuGERMAN"/>

上記の例では、strengthを「primary」と定義しました。照合の強度はソート順序の厳密さを決定しますが、言語にも依存します。たとえば、英語では、「primary」の強度は大文字と小文字の違いとアクセントを無視します。

別の例

<fieldType name="polishCaseInsensitive" class="solr.ICUCollationField"
           locale="pl_PL"
           strength="secondary" />
...
<field name="city" type="text_general" indexed="true" stored="true"/>
...
<field name="city_sort" type="polishCaseInsensitive" indexed="true" stored="false"/>
...
<copyField source="city" dest="city_sort"/>

このタイプは、データにポーランド語のテキストが含まれているフィールドに使用されます。「secondary」の強度は大文字と小文字の違いを無視しますが、「primary」の強度とは異なり、ウムラウト付きの文字は、ウムラウトのない同じ基本文字とは異なる順序でソートされます。

"city_sort"フィールドを使用してソートする例

q=*:*&fl=city&sort=city_sort+asc

複数の言語のテキストのソート

複数の言語をサポートするには、2つのアプローチがあります。サポートする言語が少数の場合は、各言語ごとに照合されたフィールドを定義し、copyFieldを使用することを検討してください。ただし、ソートフィールドを多数追加すると、ディスクとインデックス作成のコストが増加する可能性があります。別の方法としては、Unicodeのdefaultコレクターを使用する方法があります。

UnicodeのdefaultまたはROOTロケールには、ほとんどの言語でうまく機能するように設計されたルールがあります。defaultロケールを使用するには、ロケールを空文字列として定義するだけです。このUnicodeデフォルトソートは、標準のSolrソートよりもはるかに高度です。

<fieldType name="collatedROOT" class="solr.ICUCollationField"
           locale=""
           strength="primary" />

カスタムルールによるテキストのソート

独自のソートルールセットを定義できます。目的のルールに似た既存のルールを取得してカスタマイズするのが最も簡単です。

以下の例では、ドイツ語のカスタムルールセットであるDIN 5007-2を作成します。このルールセットは、ドイツ語のウムラウトを異なる方法で扱います。öをoeと同等、äをaeと同等、üをueと同等と扱います。詳細は、ICU RuleBasedCollatorのJavadocを参照してください。

この例では、solr.ICUCollationFieldのカスタムルールセットを作成し、それをファイルにダンプする方法を示しています。

// get the default rules for Germany
// these are called DIN 5007-1 sorting
RuleBasedCollator baseCollator = (RuleBasedCollator) Collator.getInstance(new ULocale("de", "DE"));

// define some tailorings, to make it DIN 5007-2 sorting.
// For example, this makes ö equivalent to oe
String DIN5007_2_tailorings =
    "& ae , a\u0308 & AE , A\u0308"+
    "& oe , o\u0308 & OE , O\u0308"+
    "& ue , u\u0308 & UE , u\u0308";

// concatenate the default rules to the tailorings, and dump it to a String
RuleBasedCollator tailoredCollator = new RuleBasedCollator(baseCollator.getRules() + DIN5007_2_tailorings);
String tailoredRules = tailoredCollator.getRules();

// write these to a file, be sure to use UTF-8 encoding!!!
FileOutputStream os = new FileOutputStream(new File("/solr_home/conf/customRules.dat"));
IOUtils.write(tailoredRules, os, "UTF-8");

このルールセットは、Solrのカスタム照合に使用できるようになりました。

<fieldType name="collatedCUSTOM" class="solr.ICUCollationField"
           custom="customRules.dat"
           strength="primary" />

JDK照合

前述のように、ICU Unicode照合はいくつかの点でJDK照合よりも優れていますが、何らかの理由でICU4Jを使用できない場合は、solr.CollationFieldを使用できます。

JDK照合の原理はICU照合と同じです。組み合わせたlocale引数の代わりに、languagecountryvariant引数を指定するだけです。

JDK照合属性

システムコレクターの使用OracleがサポートするJavaのロケールのリストを参照)

language

必須

デフォルト: なし

ISO-639言語コード。

country

オプション

デフォルト: なし

ISO-3166国コード。

variant

オプション

デフォルト: なし

ベンダーまたはブラウザ固有のコード。

strength

オプション

デフォルト: なし

有効な値はprimarysecondarytertiary、またはidenticalです。Java CollatorのJavadocの詳細については、こちらを参照してください。

decomposition

オプション

デフォルト: なし

有効な値はnocanonical、またはfullです。Java CollatorのJavadocの詳細については、こちらを参照してください。

調整されたルールセットの使用:

custom

必須

デフォルト: なし

JDK RuleBasedCollatorでサポートされているルールを含むUTF-8テキストファイルへのパス。

strength

オプション

デフォルト: なし

有効な値はprimarysecondarytertiary、またはidenticalです。Java CollatorのJavadocの詳細については、こちらを参照してください。

decomposition

オプション

デフォルト: なし

有効な値はnocanonical、またはfullです。Java CollatorのJavadocの詳細については、こちらを参照してください。

solr.CollationFieldの例
<fieldType name="collatedGERMAN" class="solr.CollationField"
           language="de"
           country="DE"
           strength="primary" /> <!-- ignore Umlauts and letter case when sorting -->
...
<field name="manuGERMAN" type="collatedGERMAN" indexed="false" stored="false" docValues="true" />
...
<copyField source="manu" dest="manuGERMAN"/>

ASCIIおよび10進数フォールディングフィルタ

ASCIIフォールディング

このフィルタは、最初の127個のASCII文字(「Basic Latin」Unicodeブロック)にないアルファベット、数字、記号のUnicode文字を、存在する場合、ASCII同等物に変換します。妥当なASCII代替文字を持つ文字のみが変換されます。

これにより、一致する数が多くなり、再現率が向上する可能性があります。一方、言語固有の文字の違いが失われるため、精度が低下する可能性があります。

ファクトリクラス: solr.ASCIIFoldingFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="asciiFolding"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>

入力: "Björn Ångström"

フィルタへのトークナイザ: "Björn", "Ångström"

出力: "Bjorn", "Angstrom"

10進数桁のフォールディング

このフィルタは、Unicodeの「10進数」一般カテゴリ(Nd)の任意の文字を、同等のBasic Latin数字(0~9)に変換します。

これにより、一致する数が多くなり、再現率が向上する可能性があります。一方、言語固有の文字の違いが失われるため、精度が低下する可能性があります。

ファクトリクラス: solr.DecimalDigitFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="decimalDigit"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.DecimalDigitFilterFactory"/>
</analyzer>

OpenNLPの統合

Luceneモジュールlucene/analysis/opennlpは、いくつかの分析コンポーネント(トークナイザ、品詞タグ付けフィルタ、フレーズチャンクフィルタ、そしてレマタイゼーションフィルタ)を介してOpenNLPの統合を提供します。これらの分析コンポーネントに加えて、Solrは、名前付きエンティティを抽出するための更新リクエストプロセッサも提供します。プラグインとしてロードできる更新プロセッサファクトリも参照してください。

OpenNLPトークナイザは、2つの理由から、他のすべてのOpenNLP分析コンポーネントとともに使用しなければなりません。第一に、OpenNLPトークナイザは、すべてのOpenNLPフィルタに必要な文の境界を検出し、マーク付けします。第二に、これらのフィルタで使用される事前トレーニング済みのOpenNLPモデルは、対応する言語固有の文検出/トークナイゼーションモデルを使用してトレーニングされたため、最適なパフォーマンスを得るには、実行時に同じモデルを使用して同じトークナイゼーションを使用する必要があります。

OpenNLPコンポーネントを使用するには、analysis-extrasモジュールを有効にする必要があります。

OpenNLPトークナイザ

OpenNLPトークナイザは、パラメータとして2つの言語固有のバイナリモデルファイル(文検出モデルとトークナイザモデル)を受け取ります。各文の最後のトークンにはフラグが付けられるため、後続のOpenNLPベースのフィルタは、この情報を使用して、文ごとにトークンに操作を適用できます。事前トレーニング済みモデルのダウンロードについては、OpenNLPのウェブサイトを参照してください。

ファクトリクラス: solr.OpenNLPTokenizerFactory

引数

sentenceModel

必須

デフォルト: なし

言語固有のOpenNLP文章検出モデルファイルのパス。詳細はリソースの読み込みを参照してください。

tokenizerModel

必須

デフォルト: なし

言語固有のOpenNLPトークナイザーモデルファイルのパス。詳細はリソースの読み込みを参照してください。

名前付き

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.OpenNLPTokenizerFactory"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
</analyzer>

OpenNLP品詞フィルタ

このフィルタは、設定されたモデルによって割り当てられた品詞(POS)を各トークンのtype属性に設定します。事前トレーニング済みモデルのダウンロードに関する情報は、OpenNLPウェブサイトを参照してください。

Luceneは現在、トークンタイプをインデックスに登録しません。この情報を保持したい場合は、ペイロードまたはシノニムとして保持する必要があります。下記の例を参照してください。

ファクトリクラス: solr.OpenNLPPOSFilterFactory

引数

posTaggerModel

必須

デフォルト: なし

言語固有のOpenNLP品詞タグ付けモデルファイルのパス。詳細はリソースの読み込みを参照してください。

OpenNLPトークナイザーは句読点をトークン化しますが、これは後続のトークンフィルタに役立ちます。通常、句読点をインデックスに含める必要はありません。そのため、下記の例にはTypeTokenFilterが含まれており、stop.pos.txtには以下が含まれています。

stop.pos.txt
#
$
''
``
,
-LRB-
-RRB-
:
.

各トークンの品詞をペイロードとしてインデックスに登録する

名前付き

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="typeAsPayload"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.OpenNLPTokenizerFactory"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter class="solr.OpenNLPPOSFilterFactory" posTaggerModel="en-pos-maxent.bin"/>
  <filter class="solr.TypeAsPayloadFilterFactory"/>
  <filter class="solr.TypeTokenFilterFactory" types="stop.pos.txt"/>
</analyzer>

品詞の前に「@」を付けて、各トークンの品詞をシノニムとしてインデックスに登録する(TypeAsSynonymFilterの説明を参照)。

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="typeAsSynonym" prefix="@"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

名詞のみをインデックスに登録する - keep.pos.txtファイルには、NNNNSNNPNNPSという行が含まれています。

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="type" types="keep.pos.txt" useWhitelist="true"/>
</analyzer>

OpenNLP句読点チャンクフィルタ

このフィルタは、OpenNLP句読点チャンクモデルの出力に基づいて、各トークンのtype属性を設定します。チャンクラベルは、以前各トークンのtype属性にあった品詞タグを置き換えます。事前トレーニング済みモデルのダウンロードに関する情報は、OpenNLPウェブサイトを参照してください。

前提条件:OpenNLPトークナイザーOpenNLP品詞フィルタがこのフィルタの前に配置されている必要があります。

Luceneは現在、トークンタイプをインデックスに登録しません。この情報を保持したい場合は、ペイロードまたはシノニムとして保持する必要があります。下記の例を参照してください。

ファクトリクラス: solr.OpenNLPChunkerFilterFactory

引数

chunkerModel

必須

デフォルト: なし

言語固有のOpenNLP句読点チャンクモデルファイルのパス。詳細はリソースの読み込みを参照してください。

:

各トークンの句読点チャンクラベルをペイロードとしてインデックスに登録する

名前付き

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="openNLPChunker" chunkerModel="en-chunker.bin"/>
  <filter name="typeAsPayload"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.OpenNLPTokenizerFactory"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter class="solr.OpenNLPPOSFilterFactory" posTaggerModel="en-pos-maxent.bin"/>
  <filter class="solr.OpenNLPChunkerFilterFactory" chunkerModel="en-chunker.bin"/>
  <filter class="solr.TypeAsPayloadFilterFactory"/>
</analyzer>

句読点チャンクラベルの前に「#」を付けて、各トークンの句読点チャンクラベルをシノニムとしてインデックスに登録する(TypeAsSynonymFilterの説明を参照)。

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="openNLPChunker" chunkerModel="en-chunker.bin"/>
  <filter name="typeAsSynonym" prefix="#"/>
</analyzer>

OpenNLP Lemmatizerフィルタ

このフィルタは、各トークンのテキストをその語幹に置き換えます。辞書ベースの語幹化ツールとモデルベースの語幹化ツールの両方がサポートされています。両方が設定されている場合、最初に辞書ベースの語幹化ツールが試行され、次に、辞書外トークンに対してモデルベースの語幹化ツールが参照されます。事前トレーニング済みモデルのダウンロードに関する情報は、OpenNLPウェブサイトを参照してください。

ファクトリクラス: solr.OpenNLPLemmatizerFilter

引数

dictionaryまたはlemmatizerModelのいずれか、または両方を指定する必要があります。下記の例を参照してください。

dictionary

オプション

デフォルト: なし

語幹化辞書ファイルのパス。詳細はリソースの読み込みを参照してください。辞書ファイルはUTF-8でエンコードする必要があり、1行に1エントリ、word[タブ]lemma[タブ]part-of-speechの形式(例:wrote[タブ]write[タブ]VBD)でなければなりません。

lemmatizerModel

オプション

デフォルト: なし

言語固有のOpenNLP語幹化モデルファイルのパス。詳細はリソースの読み込みを参照してください。

辞書ベースの語幹化を実行し、辞書外トークンに対してモデルベースの語幹化にフォールバックする(句読点をインデックスに登録しないようにTypeTokenFilterを使用する方法については、上記のOpenNLP品詞フィルタセクションを参照)。

名前付き

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="oenNLPLemmatizer"
          dictionary="lemmas.txt"
          lemmatizerModel="en-lemmatizer.bin"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.OpenNLPTokenizerFactory"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter class="solr.OpenNLPPOSFilterFactory" posTaggerModel="en-pos-maxent.bin"/>
  <filter class="solr.OpenNLPLemmatizerFilterFactory"
          dictionary="lemmas.txt"
          lemmatizerModel="en-lemmatizer.bin"/>
  <filter class="solr.TypeTokenFilterFactory" types="stop.pos.txt"/>
</analyzer>

辞書ベースの語幹化のみを実行する

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="openNLPLemmatizer" dictionary="lemmas.txt"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

モデルベースの語幹化のみを実行し、元のトークンを保持して語幹をシノニムとして出力する(KeywordRepeatFilterFactoryの説明を参照)。

<analyzer>
  <tokenizer name="openNLP"
             sentenceModel="en-sent.bin"
             tokenizerModel="en-tokenizer.bin"/>
  <filter name="openNLPPOS" posTaggerModel="en-pos-maxent.bin"/>
  <filter name="keywordRepeat"/>
  <filter name="openNLPLemmatizer" lemmatizerModel="en-lemmatizer.bin"/>
  <filter name="removeDuplicates"/>
  <filter name="type" types="stop.pos.txt"/>
</analyzer>

言語固有のファクトリ

これらのファクトリはそれぞれ、特定の言語で使用するために設計されています。ここで取り上げている言語は次のとおりです。

アラビア語

ベンガル語

ブラジルポルトガル語

ブルガリア語

カタルーニャ語

繁体字中国語

簡体字中国語

チェコ語

デンマーク語

オランダ語

エストニア語

フィンランド語

フランス語

ガリシア語

ドイツ語

ギリシャ語

ヘブライ語、ラオ語、ミャンマー語、クメール語

ヒンディー語

インドネシア語

イタリア語

アイルランド語

日本語

韓国語

ラトビア語

ノルウェー語

ペルシャ語

ポーランド語

ポルトガル語

ルーマニア語

ロシア語

スカンジナビア語

セルビア語

スペイン語

スウェーデン語

タイ語

トルコ語

ウクライナ語

アラビア語

SolrはLight-10(PDF)ステミングアルゴリズムをサポートしており、Luceneには例としてストップワードリストが含まれています。

このアルゴリズムは、文字の正規化とステミングの両方を定義しているため、より柔軟性を高めるために、これらは2つのフィルタに分割されています。

ファクトリクラス: solr.ArabicStemFilterFactorysolr.ArabicNormalizationFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="arabicNormalization"/>
  <filter name="arabicStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ArabicNormalizationFilterFactory"/>
  <filter class="solr.ArabicStemFilterFactory"/>
</analyzer>

ベンガル語

ベンガル語の処理用に特別に記述された2つのフィルタがあります。これらは、Luceneクラスorg.apache.lucene.analysis.bn.BengaliNormalizationFilterorg.apache.lucene.analysis.bn.BengaliStemFilterを使用しています。

ファクトリクラス: solr.BengaliStemFilterFactorysolr.BengaliNormalizationFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="bengaliNormalization"/>
  <filter name="bengaliStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.BengaliNormalizationFilterFactory"/>
  <filter class="solr.BengaliStemFilterFactory"/>
</analyzer>

正規化 - মানুষমানুস

ステミング - সমস্তসমস্

ブラジルポルトガル語

これは、ポルトガル語のブラジル方言のステミング用に特別に記述されたJavaフィルタです。Luceneクラスorg.apache.lucene.analysis.br.BrazilianStemmerを使用しています。そのステマーは保護された単語(ステミングされない単語)のリストを使用するように設定できますが、このファクトリは、そのようなリストを指定する引数を受け入れません。

ファクトリクラス: solr.BrazilianStemFilterFactory

引数: なし

名前付き

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="brazilianStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.BrazilianStemFilterFactory"/>
</analyzer>

入力: "praia praias"

トークナイザーからフィルタへ: "praia", "praias"

出力: "pra", "pra"

ブルガリア語

Solrには、このアルゴリズム(PDF)に従った、ブルガリア語のライトステマーが含まれており、Luceneには例としてストップワードリストが含まれています。

ファクトリクラス: solr.BulgarianStemFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="bulgarianStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.BulgarianStemFilterFactory"/>
</analyzer>

カタルーニャ語

Solrは、language="Catalan"という引数を使用して、Snowball Porter Stemmerでカタルーニャ語のステミングを行うことができます。Solrにはカタルーニャ語の縮約語のセットが含まれており、solr.ElisionFilterFactoryを使用して削除できます。

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

引数

language:

+

必須

デフォルト: なし

+ ステマー言語(この場合はCatalan)。

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_ca.txt"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Catalan" />
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.ElisionFilterFactory"
          articles="lang/contractions_ca.txt"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Catalan" />
</analyzer>

入力: "llengües llengua"

トークナイザーからフィルタへ: "llengües"(1) "llengua"(2),

出力: "llengu"(1), "llengu"(2)

繁体字中国語

ICUトークナイザーのデフォルト設定は、繁体字中国語のテキストに適しています。これは、中国語以外のテキストについてはUnicodeテキストセグメンテーションアルゴリズムの単語区切り規則に従い、辞書を使用して中国語の単語をセグメント化します。

このトークナイザーを使用するには、analysis-extrasモジュールを有効にする必要があります。

標準トークナイザーも、繁体字中国語のテキストのトークン化に使用できます。Unicodeテキストセグメンテーションアルゴリズムの単語区切り規則に従って、中国語の文字ごとに1つのトークンを生成します。CJKバイグラムフィルタと組み合わせると、中国語の文字の重複するバイグラムが形成されます。

CJK幅フィルタは、全角ASCIIバリアントを同等の基本ラテン語形式に折りたたみます。

名前付き

<analyzer>
  <tokenizer name="icu"/>
  <filter name="cjkWidth"/>
  <filter name="lowercase"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.ICUTokenizerFactory"/>
  <filter class="solr.CJKWidthFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="cjkBigram"/>
  <filter name="cjkWidth"/>
  <filter name="lowercase"/>
</analyzer>

CJKバイグラムフィルタ

標準トークナイザーまたはICUトークナイザーから生成されたCJK文字のバイグラム(重複する2文字のシーケンス)を形成します。

デフォルトでは、すべてのCJK文字がバイグラムを生成しますが、より詳細な制御を行うために、正書法の種類の引数hanhiraganakatakanahangulを指定できます。falseに設定すると、対応する種類の文字はユニグラムとして渡され、バイグラムに含まれません。

CJK文字にバイグラムを形成する隣接する文字がない場合、ユニグラム形式で出力されます。常にユニグラムとバイグラムの両方を出力する場合は、outputUnigrams引数をtrueに設定します。

いずれの場合も、CJK以外の入力は変更されずに渡されます。

引数

han

オプション

デフォルト: true

falseの場合、漢字はバイグラムを形成しません。

hiragana

オプション

デフォルト: true

falseの場合、ひらがなはバイグラムを形成しません。

katakana

オプション

デフォルト: true

falseの場合、カタカナはバイグラムを形成しません。

hangul

オプション

デフォルト: true

falseの場合、ハングルはバイグラムを形成しません。

outputUnigrams

オプション

デフォルト: false

trueの場合、バイグラムを形成することに加えて、すべての文字はユニグラムとしても渡されます。

繁体字中国語の例を参照してください。

簡体字中国語

簡体字中国語の場合、SolrはHMM中国語トークナイザーによる中国語の文章と単語のセグメンテーションをサポートしています。このコンポーネントには大規模な辞書が含まれており、隠れマルコフモデルを使用して中国語のテキストを単語にセグメント化します。このトークナイザーを使用するには、analysis-extrasモジュールを有効にする必要があります。

ICUトークナイザーのデフォルト設定も、簡体字中国語のテキストに適しています。これは、中国語以外のテキストについてはUnicodeテキストセグメンテーションアルゴリズムの単語区切り規則に従い、辞書を使用して中国語の単語をセグメント化します。このトークナイザーを使用するには、analysis-extrasモジュールを有効にする必要があります。

中国語分析にも役立ちます

CJK幅フィルタは、全角ASCIIバリアントを同等の基本ラテン語形式に折りたたみ、半角カタカナバリアントを同等の全角形式に折りたたみます。

名前付き

<analyzer>
  <tokenizer name="hmmChinese"/>
  <filter name="cjkWidth"/>
  <filter name="stop"
          words="org/apache/lucene/analysis/cn/smart/stopwords.txt"/>
  <filter name="porterStem"/>
  <filter name="lowercase"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.HMMChineseTokenizerFactory"/>
  <filter class="solr.CJKWidthFilterFactory"/>
  <filter class="solr.StopFilterFactory"
          words="org/apache/lucene/analysis/cn/smart/stopwords.txt"/>
  <filter class="solr.PorterStemFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer>
  <tokenizer name="icu"/>
  <filter name="cjkWidth"/>
  <filter name="stop"
          words="org/apache/lucene/analysis/cn/smart/stopwords.txt"/>
  <filter name="lowercase"/>
</analyzer>

HMM中国語トークナイザー

簡体字中国語の場合、Solr は`analysis-extras` モジュール内の`solr.HMMChineseTokenizerFactory` を使用して、中国語の文章と単語の分割をサポートしています。このコンポーネントには大規模な辞書が含まれており、隠れマルコフモデルを使用して中国語のテキストを単語に分割します。このトークナイザーを使用するには、analysis-extras モジュールを有効にする必要があります。

ファクトリクラス: `solr.HMMChineseTokenizerFactory`

引数: なし

英語の単語に対して英語のPorterステマーにフォールバックするデフォルト設定を使用するには、以下を使用します。

<analyzer class="org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer"/>

または、独自の分析設定を構成するには、カスタムフィルター設定と共に`solr.HMMChineseTokenizerFactory` を使用します。これの例については、簡体字中国語 セクションを参照してください。

チェコ語

Solr には、このアルゴリズムに従ったチェコ語のライトステマーが含まれており、Lucene にはストップワードの例リストが含まれています。

ファクトリクラス: `solr.CzechStemFilterFactory`

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="czechStem"/>
<analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.CzechStemFilterFactory"/>
<analyzer>

入力: "prezidenští, prezidenta, prezidentského"

トークナイザーからフィルターへ: "prezidenští", "prezidenta", "prezidentského"

出力: "preziden", "preziden", "preziden"

デンマーク語

Solr は、`language="Danish"` の引数を使用して Snowball Porter ステマーでデンマーク語のステミングを行うことができます。

また、スカンジナビア語の正規化フィルターも関連しています。

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

引数

language

必須

デフォルト: なし

ステマー言語は、この場合は`Danish` です。

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="snowballPorter" language="Danish" />
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Danish" />
</analyzer>

入力: "undersøg undersøgelse"

トークナイザーからフィルターへ: "undersøg"(1) "undersøgelse"(2),

出力: "undersøg"(1), "undersøg"(2)

オランダ語

Solr は、`language="Dutch"` の引数を使用して Snowball Porter ステマーでオランダ語のステミングを行うことができます。

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

引数

language

必須

デフォルト: なし

ステマー言語は、この場合は`Dutch` です。

名前付き

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="snowballPorter" language="Dutch"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Dutch"/>
</analyzer>

入力: "kanaal kanalen"

トークナイザーからフィルターへ: "kanaal", "kanalen"

出力: "kanal", "kanal"

エストニア語

Solr は、`language="Estonian"` の引数を使用して Snowball Porter ステマーでエストニア語のステミングを行うことができます。

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

引数

language

必須

デフォルト: なし

ステマー言語は、この場合は`Estonian` です。

名前付き

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="snowballPorter" language="Estonian"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Estonian"/>
</analyzer>

入力: "Taevani tõustes"

トークナイザーからフィルターへ: "Taevani", "tõustes"

出力: "taevani", "tõus"

フィンランド語

Solr はフィンランド語のステミングをサポートしており、Lucene にはストップワードの例リストが含まれています。

ファクトリクラス: `solr.FinnishLightStemFilterFactory`

引数: なし

名前付き

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="finnishLightStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.FinnishLightStemFilterFactory"/>
</analyzer>

入力: "kala kalat"

トークナイザーからフィルターへ: "kala", "kalat"

出力: "kala", "kala"

フランス語

省略フィルター

トークンストリームから冠詞の省略形を削除します。このフィルターは、フランス語、カタルーニャ語、イタリア語、アイルランド語などの言語に役立ちます。

ファクトリクラス: `solr.ElisionFilterFactory`

引数

articles

オプション

デフォルト: なし

削除する冠詞のリスト(1行に1つ)を含むファイルのパス名。冠詞とは、「le」のような、例えば *l’avion*(飛行機)のように一般的に略される単語です。このファイルには、アポストロフィの前にある略語(この場合は単に「*l*」)を含める必要があります。`articles` 属性が指定されていない場合は、フランス語の冠詞のデフォルトセットが使用されます。

ignoreCase

オプション

デフォルト: false

`true` の場合、フィルターは一般的な単語ファイルと比較するときに単語の大文字と小文字を無視します。

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="elision"
          ignoreCase="true"
          articles="lang/contractions_fr.txt"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ElisionFilterFactory"
          ignoreCase="true"
          articles="lang/contractions_fr.txt"/>
</analyzer>

入力: "L’histoire d’art"

トークナイザーからフィルターへ: "L’histoire", "d’art"

出力: "histoire", "art"

フランス語ライトステムフィルター

Solr には、`solr.SnowballPorterFilterFactory` の1つ、`solr.FrenchLightStemFilterFactory` と呼ばれるより軽いステマー、`solr.FrenchMinimalStemFilterFactory` と呼ばれるさらにアグレッシブでないステマーの3つのフランス語ステマーが含まれています。Lucene にはストップワードの例リストが含まれています。

ファクトリクラス: `solr.FrenchLightStemFilterFactory`、`solr.FrenchMinimalStemFilterFactory`

引数: なし

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_fr.txt"/>
  <filter name="frenchLightStem"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_fr.txt"/>
  <filter name="frenchMinimalStem"/>
</analyzer>

入力: "le chat, les chats"

トークナイザーからフィルターへ: "le", "chat", "les", "chats"

出力: "le", "chat", "le", "chat"

ガリシア語

Solr には、このアルゴリズムに従ったガリシア語のステマーが含まれており、Lucene にはストップワードの例リストが含まれています。

ファクトリクラス: `solr.GalicianStemFilterFactory`

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="galicianStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.GalicianStemFilterFactory"/>
</analyzer>

入力: "felizmente Luzes"

トークナイザーからフィルターへ: "felizmente", "luzes"

出力: "feliz", "luz"

ドイツ語

Solr には、`solr.SnowballPorterFilterFactory language="German"` の1つ、`solr.GermanStemFilterFactory` と呼ばれるステマー、`solr.GermanLightStemFilterFactory` と呼ばれるより軽いステマー、`solr.GermanMinimalStemFilterFactory` と呼ばれるさらにアグレッシブでないステマーの4つのドイツ語ステマーが含まれています。Lucene にはストップワードの例リストが含まれています。

ファクトリクラス: `solr.GermanStemFilterFactory`、`solr.LightGermanStemFilterFactory`、`solr.MinimalGermanStemFilterFactory`

引数: なし

名前付き

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="germanStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.GermanStemFilterFactory"/>
</analyzer>
<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="germanLightStem"/>
</analyzer>
<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="germanMinimalStem"/>
</analyzer>

入力: "haus häuser"

トークナイザーからフィルターへ: "haus", "häuser"

出力: "haus", "haus"

ギリシャ語

このフィルターは、ギリシャ文字セットの大文字を対応する小文字に変換します。

ファクトリクラス: `solr.GreekLowerCaseFilterFactory`

引数: なし

Solr 3.1 以降、カスタム文字セットの使用はサポートされなくなりました。これらのエンコーディングでテキストをインデックスする必要がある場合は、入出力中に Java の文字セット変換機能(InputStreamReader など)を使用して、Lucene がこのテキストを Unicode として分析できるようにしてください。

名前付き

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="greekLowercase"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.GreekLowerCaseFilterFactory"/>
</analyzer>

ヒンディー語

Solr は、このアルゴリズム(PDF)に従ったヒンディー語のステミングのサポート、`solr.HindiNormalizationFilterFactory` を通じた一般的なスペル違いのサポート、このアルゴリズムに従った`solr.IndicNormalizationFilterFactory` を通じたエンコーディングの違いのサポートを提供しており、Lucene にはストップワードの例リストが含まれています。

ファクトリクラス: `solr.IndicNormalizationFilterFactory`、`solr.HindiNormalizationFilterFactory`、`solr.HindiStemFilterFactory`

引数: なし

名前付き

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="indicNormalization"/>
  <filter name="hindiNormalization"/>
  <filter name="hindiStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.IndicNormalizationFilterFactory"/>
  <filter class="solr.HindiNormalizationFilterFactory"/>
  <filter class="solr.HindiStemFilterFactory"/>
</analyzer>

インドネシア語

Solr は、このアルゴリズム(PDF)に従ったインドネシア語(Bahasa Indonesia)のステミングをサポートしており、Lucene にはストップワードの例リストが含まれています。

ファクトリクラス: `solr.IndonesianStemFilterFactory`

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="indonesianStem" stemDerivational="true" />
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.IndonesianStemFilterFactory" stemDerivational="true" />
</analyzer>

入力: "sebagai sebagainya"

トークナイザーからフィルターへ: "sebagai", "sebagainya"

出力: "bagai", "bagai"

イタリア語

Solr には、`solr.SnowballPorterFilterFactory language="Italian"` の1つ、`solr.ItalianLightStemFilterFactory` と呼ばれるより軽いステマーの2つのイタリア語ステマーが含まれています。Lucene にはストップワードの例リストが含まれています。

ファクトリクラス: `solr.ItalianStemFilterFactory`

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="elision"
          articles="lang/contractions_it.txt"/>
  <filter name="italianLightStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.ElisionFilterFactory"
          articles="lang/contractions_it.txt"/>
  <filter class="solr.ItalianLightStemFilterFactory"/>
</analyzer>

入力: "propaga propagare propagamento"

トークナイザーからフィルターへ: "propaga", "propagare", "propagamento"

出力: "propag", "propag", "propag"

アイルランド語

Solr は、`language="Irish"` の引数を使用して Snowball Porter ステマーでアイルランド語のステミングを行うことができます。Solr には、アイルランド語特有の構造を処理できる`solr.IrishLowerCaseFilterFactory` が含まれています。Solr には、`solr.ElisionFilterFactory` を使用して削除できるアイルランド語の縮約語のセットも含まれています。

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

引数

language

必須

デフォルト: なし

ステマー言語は、この場合は`Irish` です。

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="elision"
          articles="lang/contractions_ga.txt"/>
  <filter name="irishLowercase"/>
  <filter name="snowballPorter" language="Irish" />
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ElisionFilterFactory"
          articles="lang/contractions_ga.txt"/>
  <filter class="solr.IrishLowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Irish" />
</analyzer>

入力: "siopadóireacht síceapatacha b’fhearr m’athair"

トークナイザーからフィルターへ: "siopadóireacht", "síceapatacha", "b’fhearr", "m’athair"

出力: "siopadóir", "síceapaite", "fearr", "athair"

日本語

Solr は、いくつかの分析コンポーネントを含む Lucene Kuromoji 形態素解析器を介して、日本語の分析をサポートしています。各コンポーネントの詳細については以下を参照してください。

  • JapaneseIterationMarkCharFilter は、日本語の水平繰り返し記号(踊り字)を展開された形式に正規化します。

  • JapaneseTokenizer は、形態素解析を使用して日本語をトークン化し、各用語に品詞、基本形(別名レマ)、読み、発音を注釈付けします。

  • JapaneseBaseFormFilter は、元の用語を基本形(別名レマ)に置き換えます。

  • JapanesePartOfSpeechStopFilter は、構成された品詞の1つを持つ用語を削除します。

  • JapaneseKatakanaStemFilter は、長音記号(U+30FC)で終わる一般的なカタカナのスペルバリエーションを、長音記号を削除することで正規化します。

lucene-analyzers-common からの日本語分析にも役立ちます。

  • CJKWidthFilter は、全角ASCIIバリアントを同等のBasic Latin形式に折りたたみ、半角カタカナバリアントを同等の全角形式に折りたたみます。

Japanese Iteration Mark CharFilter

日本語の水平繰り返し記号(踊り字)を展開された形式に正規化します。垂直繰り返し記号はサポートされていません。

ファクトリクラス: `JapaneseIterationMarkCharFilterFactory`

引数

normalizeKanji

オプション

デフォルト: true

漢字の繰り返し記号を正規化しない場合は`false` に設定します。

normalizeKana

オプション

デフォルト: true

かなの繰り返し記号を正規化しない場合は`false` に設定します。

Japanese Tokenizer

形態素解析を使用して日本語をトークン化し、各用語に品詞、基本形(別名レマ)、読み、発音を注釈付けするトークナイザー。

JapaneseTokenizer には、検索に役立つセグメンテーションを行う`search` モード(デフォルト)があります。ヒューリスティックを使用して、複合語を構成要素に分割すると同時に、元の複合語を同義語として保持します。

ファクトリクラス: `solr.JapaneseTokenizerFactory`

引数

mode

オプション

デフォルト: なし

検索に役立つ名詞の分解効果を得るには`search` モードを使用します。`search` モードは、品詞の精度を犠牲にして、検索のためのセグメンテーションを改善します。`mode` の有効な値は次のとおりです。

  • `normal`: デフォルトのセグメンテーション

  • `search`: 検索に役立つセグメンテーション(追加の複合語分割)

  • `extended`: 検索モードと未知の単語のユニグラム化(実験的)

    一部のアプリケーションでは、インデックス付けには`search` モードを使用し、クエリには`normal` モードを使用することで、精度を高め、複合語の一部が一致して強調表示されるのを防ぐことができます。

userDictionary

オプション

デフォルト: なし

ユーザー辞書のファイル名。これにより、重みを指定する必要なく、セグメンテーション、品詞タグ、読みに関する独自の項目を使用して統計モデルを上書きできます。サンプルのユーザー辞書ファイルについては、`lang/userdict_ja.txt` を参照してください。

userDictionaryEncoding

オプション

デフォルト: `UTF-8`

ユーザー辞書のエンコーディング。

discardPunctuation

オプション

デフォルト: true

句読点を保持するには`false` に、破棄するには`true` に設定します。

discardCompoundToken

オプション

デフォルト: なし

`search` モードで元の複合トークンを保持するには`false` に、破棄するには`true` に設定します。

Japanese Base Form Filter

元の用語のテキストを対応する基本形(レマ)に置き換えます。(JapaneseTokenizer は、各用語に基本形を注釈付けします。)

ファクトリクラス: `JapaneseBaseFormFilterFactory`

引数: なし

Japanese Part Of Speech Stop Filter

構成された品詞の1つを持つ用語を削除します。JapaneseTokenizer は、用語に品詞を注釈付けします。

ファクトリクラス: `JapanesePartOfSpeechStopFilterFactory`

引数

tags

オプション

デフォルト: なし

用語を削除する品詞のリストのファイル名。例については、sample_techproducts_configconfigset 内の`conf/lang/stoptags_ja.txt` を参照してください。

Japanese Katakana Stem Filter

長音記号(U+30FC)で終わる一般的なカタカナのスペルバリエーションを、長音記号を削除することで正規化します。

solr.CJKWidthFilterFactory は、半角カタカナを全角に正規化するために、このフィルターの前に指定する必要があります。

ファクトリクラス: `JapaneseKatakanaStemFilterFactory`

引数

minimumLength

オプション

デフォルト: `4`

この長さ以下の用語はステミングされません。値は`2` 以上である必要があります。

CJK文字幅フィルタ

全角ASCII文字を対応する半角Basic Latin形式に変換し、半角カタカナ文字を対応する全角形式に変換します。

ファクトリクラス: CJKWidthFilterFactory

引数: なし

名前付き

<fieldType name="text_ja" positionIncrementGap="100" autoGeneratePhraseQueries="false">
  <analyzer>
    <!-- Uncomment if you need to handle iteration marks: -->
    <!-- <charFilter name="japaneseIterationMark" /> -->
    <tokenizer name="japanese" mode="search" userDictionary="lang/userdict_ja.txt"/>
    <filter name="japaneseBaseForm"/>
    <filter name="japanesePartOfSpeechStop" tags="lang/stoptags_ja.txt"/>
    <filter name="cjkWidth"/>
    <filter name="stop" ignoreCase="true" words="lang/stopwords_ja.txt"/>
    <filter name="japaneseKatakanaStem" minimumLength="4"/>
    <filter name="lowercase"/>
  </analyzer>
</fieldType>

クラス名付き(レガシー)

<fieldType name="text_ja" positionIncrementGap="100" autoGeneratePhraseQueries="false">
  <analyzer>
    <!-- Uncomment if you need to handle iteration marks: -->
    <!-- <charFilter class="solr.JapaneseIterationMarkCharFilterFactory" /> -->
    <tokenizer class="solr.JapaneseTokenizerFactory" mode="search" userDictionary="lang/userdict_ja.txt"/>
    <filter class="solr.JapaneseBaseFormFilterFactory"/>
    <filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="lang/stoptags_ja.txt"/>
    <filter class="solr.CJKWidthFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_ja.txt"/>
    <filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

韓国語

韓国語(nori)アナライザは、Luceneのnori分析モジュールをSolrに統合します。韓国語テキストの形態素解析には、mecab-ko-dic辞書を使用します。

この辞書はMeCabを使用して構築されており、韓国語に合わせて調整されたフィーチャのフォーマットを定義しています。

noriには、ユーザー辞書機能もあり、重みを指定する必要なく、独自のセグメンテーション、品詞タグ、読みの項目を使用して統計モデルを上書きできます。

:

名前付き

<fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer name="korean" decompoundMode="discard" outputUnknownUnigrams="false"/>
    <filter name="koreanPartOfSpeechStop" />
    <filter name="koreanReadingForm" />
    <filter name="lowercase" />
  </analyzer>
</fieldType>

クラス名付き(レガシー)

<fieldType name="text_ko" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.KoreanTokenizerFactory" decompoundMode="discard" outputUnknownUnigrams="false"/>
    <filter class="solr.KoreanPartOfSpeechStopFilterFactory" />
    <filter class="solr.KoreanReadingFormFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

韓国語トークナイザ

ファクトリクラス: solr.KoreanTokenizerFactory

SPI名: korean

引数:

userDictionary

オプション

デフォルト: なし

デフォルト辞書にカスタム名詞または複合語を追加するための、ユーザーが指定する辞書のパス。

userDictionaryEncoding

オプション

デフォルト: なし

ユーザー辞書の文字エンコーディング。

decompoundMode

オプション

デフォルト: discard

複合トークンの処理方法を定義します。オプションは以下のとおりです。

  • none: トークンの分解は行いません。

  • discard: トークンを分解し、元の形式は破棄します。

  • mixed: トークンを分解し、元の形式は保持します。

outputUnknownUnigrams

オプション

デフォルト: false

trueの場合、未知の単語に対してユニグラムが出力されます。

discardPunctuation

オプション

デフォルト: true

trueの場合、句読点が破棄されます。

韓国語品詞ストップフィルタ

このフィルタは、品詞タグに一致するトークンを削除します。

ファクトリクラス: solr.KoreanPartOfSpeechStopFilterFactory

SPI名: koreanPartOfSpeechStop

引数: なし。

韓国語読み方フィルタ

このフィルタは、項のテキストを読み属性(漢字のハングル表記)に置き換えます。

ファクトリクラス: solr.KoreanReadingFormFilterFactory

SPI名: koreanReadingForm

引数: なし。

ヘブライ語、ラオ語、ミャンマー語、クメール語

Luceneは、UAX#29単語区切りルールに加えて、ヘブライ語における二重引用符と単一引用符の使用、およびanalysis-extrasモジュールのsolr.ICUTokenizerFactoryによるラオ語、ミャンマー語、クメール語のシラブルへのセグメンテーションをサポートしています。このトークナイザを使用するには、analysis-extrasモジュールを有効にする必要があります。

ICUTokenizer を参照して詳細情報を確認してください。

ラトビア語

Solrはラトビア語のステミングをサポートしており、Luceneにはストップワードリストの例が含まれています。

ファクトリクラス: solr.LatvianStemFilterFactory

引数: なし

名前付き

<fieldType name="text_lvstem" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer name="standard"/>
    <filter name="lowercase"/>
    <filter name="latvianStem"/>
  </analyzer>
</fieldType>

クラス名付き(レガシー)

<fieldType name="text_lvstem" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.LatvianStemFilterFactory"/>
  </analyzer>
</fieldType>

入力: "tirgiem tirgus"

フィルタ対象トークナイザ: "tirgiem", "tirgus"

出力: "tirg", "tirg"

ノルウェー語

Solrには、ノルウェー語のステミングを行う2つのクラス、NorwegianLightStemFilterFactoryNorwegianMinimalStemFilterFactoryが含まれています。Luceneにはストップワードリストの例が含まれています。

別のオプションとして、language="Norwegian"の引数を使用してSnowball Porter Stemmerを使用できます。

正規化には、スカンジナビア語の正規化フィルタのバリアントですが、ノルウェー語に合わせて調整された折り畳みルールを持つNorwegianNormalizationFilterFactoryがあります。

ノルウェー語ライトステマー

NorwegianLightStemFilterFactoryは、-domと-hetの語尾に対して「2パス」ソートが必要です。つまり、最初のパスでは単語「kristendom」が「kristen」にステミングされ、その後、一般的なルールがすべて適用されるため、「krist」にさらにステミングされます。これにより、「kristen」、「kristendom」、「kristendommen」、「kristendommens」はすべて「krist」にステミングされます。

2番目のパスは、-domと-hetの語尾を取り上げます。この例を考えてみてください。

1パス 2パス

forlegen

forleg

forlegen

forleg

forlegenhet

forlegen

forlegenhet

forleg

forlegenheten

forlegen

forlegenheten

forleg

forlegenhetens

forlegen

forlegenhetens

forleg

firkantet

firkant

firkantet

firkant

firkantethet

firkantet

firkantethet

firkant

firkantetheten

firkantet

firkantetheten

firkant

ファクトリクラス: solr.NorwegianLightStemFilterFactory

引数

variant

オプション

デフォルト: nb

使用するノルウェー語のバリアント。有効な値は以下のとおりです。

  • nb: ブークモール

  • nn: ニュノルスク

  • no: 両方

名前付き

<fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer name="standard"/>
    <filter name="lowercase"/>
    <filter name="stop" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball"/>
    <filter name="norwegianLightStem"/>
  </analyzer>
</fieldType>

クラス名付き(レガシー)

<fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball"/>
    <filter class="solr.NorwegianLightStemFilterFactory"/>
  </analyzer>
</fieldType>

入力: "Forelskelsen"

フィルタ対象トークナイザ: "forelskelsen"

出力: "forelske"

ノルウェー語ミニマルステマー

NorwegianMinimalStemFilterFactoryは、ノルウェー語名詞の複数形のみをステミングします。

ファクトリクラス: solr.NorwegianMinimalStemFilterFactory

引数

variant

オプション

デフォルト: nb

使用するノルウェー語のバリアント。有効な値は以下のとおりです。

  • nb: ブークモール

  • nn: ニュノルスク

  • no: 両方

<fieldType name="text_no" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer name="standard"/>
    <filter name="lowercase"/>
    <filter name="stop" ignoreCase="true" words="lang/stopwords_no.txt" format="snowball"/>
    <filter name="norwegianMinimalStem"/>
  </analyzer>
</fieldType>

入力: "Bilens"

フィルタ対象トークナイザ: "bilens"

出力: "bil"

ノルウェー語正規化フィルタ

このフィルタは、交換可能なスカンジナビア文字æÆäÄöÖøØåÅと折り畳まれたバリアント(ae、oe、aa)をæÆøØåÅに変換することで、それらの使用を正規化します。これはScandinavianNormalizationFilterのバリアントであり、ノルウェー語に合わせてカスタマイズされた折り畳みルールを使用しています。

ファクトリクラス: solr.NorwegianNormalizationFilterFactory

引数: なし

名前付き

<analyzer>
<tokenizer name="standard"/>
<filter name="lowercase"/>
<filter name="norwegianNormalization"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NorwegianNormalizationFilterFactory"/>
</analyzer>

入力: "blåbærsyltetøj blåbärsyltetöj blaabaarsyltetoej blabarsyltetoj"

フィルタ対象トークナイザ: "blåbærsyltetøy", "blåbärsyltetöy", "blaabaersyltetoey", "blabarsyltetoy"

出力: "blåbærsyltetøy", "blåbærsyltetøy", "blåbærsyltetøy", "blabarsyltetoy"

ペルシャ語

ペルシャ語フィルタファクトリ

Solrはペルシャ語の正規化をサポートしており、Luceneにはストップワードリストの例が含まれています。

ファクトリクラス: solr.PersianNormalizationFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="arabicNormalization"/>
  <filter name="persianNormalization"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ArabicNormalizationFilterFactory"/>
  <filter class="solr.PersianNormalizationFilterFactory"/>
</analyzer>

ポーランド語

Solrは、analysis-extrasモジュール内のsolr.StempelPolishStemFilterFactoryによるポーランド語のステミングと、solr.MorphologikFilterFactoryによるレマタイゼーションをサポートしています。solr.StempelPolishStemFilterFactoryコンポーネントには、ポーランド語のテーブルを含むアルゴリズムステマーが含まれています。このトークナイザを使用するには、analysis-extrasモジュールを有効にする必要があります。

ファクトリクラス: solr.StempelPolishStemFilterFactoryおよびsolr.MorfologikFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="stempelPolishStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.StempelPolishStemFilterFactory"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="morfologik" dictionary="morfologik/stemming/polish/polish.dict"/>
  <filter name="lowercase"/>
</analyzer>

入力: ""studenta studenci"

フィルタ対象トークナイザ: "studenta", "studenci"

出力: "student", "student"

Stempelステマーの詳細については、LuceneのJavadocを参照してください。

小文字フィルタは、Morfologikステマーの*後*に適用されます。これは、ポーランド語の辞書に固有名詞が含まれており、固有名詞の大文字/小文字のケースが、曖昧さを解消する(または正しい語幹を検索する)ために重要になる可能性があるためです。

Morfologik辞書パラメータの値は、選択する辞書を指定する定数です。辞書リソースはpath/to/language.dictという名前でなければならず、関連付けられた.infoメタデータファイルが必要です。詳細については、Morfologikプロジェクトを参照してください。辞書属性が指定されていない場合、ポーランド語辞書がデフォルトでロードされ使用されます。

ポルトガル語

Solrには、ポルトガル語のステマーが4つ含まれています。1つはsolr.SnowballPorterFilterFactory、別のステマーはsolr.PortugueseStemFilterFactory、さらに軽いステマーはsolr.PortugueseLightStemFilterFactory、そしてさらに積極性が低いステマーはsolr.PortugueseMinimalStemFilterFactoryです。Luceneにはストップワードリストの例が含まれています。

ファクトリクラス: solr.PortugueseStemFilterFactorysolr.PortugueseLightStemFilterFactorysolr.PortugueseMinimalStemFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="portugueseStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.PortugueseStemFilterFactory"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="portugueseLightStem"/>
</analyzer>
<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="portugueseMinimalStem"/>
</analyzer>

入力: "praia praias"

トークナイザーからフィルタへ: "praia", "praias"

出力: "pra", "pra"

ルーマニア語

Solrは、language="Romanian"の引数を使用してSnowball Porter Stemmerを使用してルーマニア語をステミングできます。

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

引数

language

必須

デフォルト: なし

ステマー言語(この場合はRomanian)。

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="wnowballPorter" language="Romanian" />
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Romanian" />
</analyzer>

ロシア語

ロシア語ステムフィルタ

Solrには、ロシア語のステマーが2つ含まれています。1つはsolr.SnowballPorterFilterFactory language="Russian"、もう1つは、より軽いステマーであるsolr.RussianLightStemFilterFactoryです。Luceneにはストップワードリストの例が含まれています。

ファクトリクラス: solr.RussianLightStemFilterFactory

引数: なし

名前付き

<analyzer type="index">
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="russianLightStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.RussianLightStemFilterFactory"/>
</analyzer>

スカンジナビア語

スカンジナビア語は、ノルウェー語スウェーデン語デンマーク語の3つの非常に類似した言語にまたがる言語グループです。

スウェーデン語のå、ä、öは、実際にはノルウェー語とデンマーク語のå、æ、øと同じ文字であり、これらの言語間で使用される場合は交換可能です。ただし、これらの文字がないキーボードで入力する場合、折り畳み方が異なります。

そのような状況では、ほとんどのスウェーデン人がå、ä、öの代わりにa、a、oを使用します。一方、ノルウェー人とデンマーク人は、å、æ、øの代わりに通常aa、ae、oeを入力します。ただし、a、a、o、oo、aoを使用する場合や、上記のすべての置換を使用する場合もあります。

スカンジナビア語間の正規化に役立つ2つのフィルタがあります。1つは特殊文字(æäöå)を保持しようとするsolr.ScandinavianNormalizationFilterFactory、もう1つはこれらをより広いø/ö → oなどに折り畳むsolr.ScandinavianFoldingFilterFactoryです。

他の関連するフィルタについては、各言語のセクションも参照してください。

スカンジナビア語正規化フィルタ

このフィルタは、交換可能なスカンジナビア文字æÆäÄöÖøØと折り畳まれたバリアント(aa、ao、ae、oe、oo)をåÅæÆøØに変換することで、それらの使用を正規化します。

これは、ScandinavianFoldingFilterよりも意味的に破壊性の少ないソリューションであり、ノルウェー語またはデンマーク語キーボードを使用する人がスウェーデン語インデックスをクエリする場合などに最も役立ちます。このフィルタは、åとäをaに、öをoに折り畳む一般的なスウェーデン語の折り畳みは**行いません**。

ファクトリクラス: solr.ScandinavianNormalizationFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="scandinavianNormalization"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.ScandinavianNormalizationFilterFactory"/>
</analyzer>

入力: "blåbærsyltetøj blåbärsyltetöj blaabaarsyltetoej blabarsyltetoj"

フィルタ対象トークナイザ: "blåbærsyltetøj", "blåbärsyltetöj", "blaabaersyltetoej", "blabarsyltetoj"

出力: "blåbærsyltetøj", "blåbærsyltetøj", "blåbærsyltetøj", "blabarsyltetoj"

スカンジナビア語折り畳みフィルタ

このフィルタは、スカンジナビア文字åÅäæÄÆ → aとöÖøØ → oを折り畳みます。また、二重母音aa、ae、ao、oe、ooの使用を区別し、最初のものだけを残します。

これは、ScandinavianNormalizationFilterよりも意味的に破壊性の高いソリューションですが、raksmorgasをräksmörgåsと照合する際に役立つ場合があります。

ファクトリクラス: solr.ScandinavianFoldingFilterFactory

引数: なし

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="scandinavianFolding"/>
</analyzer>

入力: "blåbærsyltetøj blåbärsyltetöj blaabaarsyltetoej blabarsyltetoj"

フィルタ対象トークナイザ: "blåbærsyltetøj", "blåbärsyltetöj", "blaabaersyltetoej", "blabarsyltetoj"

出力: "blabarsyltetoj", "blabarsyltetoj", "blabarsyltetoj", "blabarsyltetoj"

セルビア語

セルビア語正規化フィルタ

Solrには、セルビア語のキリル文字とラテン文字を正規化するフィルタが含まれています。このフィルタは、小文字の入力でのみ機能することに注意してください。

このフィルタの使用に関するユーザーのヒントとアドバイスについては、Solr Wikiのセルビア語サポートを参照してください。

ファクトリクラス: solr.SerbianNormalizationFilterFactory

引数

haircut

オプション

デフォルト: bald

正規化の範囲を選択します。有効な値は以下のとおりです。

  • bald: キリル文字は最初にラテン文字に変換されます。次に、ラテン文字のダイアクリティカルマークは削除されます。LATIN SMALL LETTER D WITH STROKE(U+0111)を除き、「dj」に変換されます。

  • regular: キリル文字からラテン文字への正規化のみが適用され、ラテン文字のダイアクリティカルマークは保持されます。

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="serbianNormalization" haircut="bald"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SerbianNormalizationFilterFactory" haircut="bald"/>
</analyzer>

スペイン語

Solrには、スペイン語用の2つのステマーが含まれています。1つはsolr.SnowballPorterFilterFactory language="Spanish"にあり、もう1つはsolr.SpanishLightStemFilterFactoryと呼ばれる軽量なステマーです。Luceneには、ストップワードの例リストが含まれています。

ファクトリクラス: solr.SpanishStemFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="spanishLightStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SpanishLightStemFilterFactory"/>
</analyzer>

入力: "torear toreara torearlo"

トークナイザーからフィルタへ: "torear", "toreara", "torearlo"

出力: "tor", "tor", "tor"

スウェーデン語

スウェーデン語ステムフィルタ

Solrには、スウェーデン語用の2つのステマーが含まれています。1つはsolr.SnowballPorterFilterFactory language="Swedish"にあり、もう1つはsolr.SwedishLightStemFilterFactoryと呼ばれる軽量なステマーです。Luceneには、ストップワードの例リストが含まれています。

また、スカンジナビア語の正規化フィルターも関連しています。

ファクトリクラス: solr.SwedishStemFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="lowercase"/>
  <filter name="swedishLightStem"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.SwedishLightStemFilterFactory"/>
</analyzer>

入力: "kloke klokhet klokheten"

トークナイザーからフィルタへ: "kloke", "klokhet", "klokheten"

出力: "klok", "klok", "klok"

タイ語

このフィルタは、タイ文字のシーケンスを個々のタイ語の単語に変換します。ヨーロッパの言語とは異なり、タイ語では単語の区切りに空白を使用しません。

ファクトリクラス: solr.ThaiTokenizerFactory

引数: なし

名前付き

<analyzer type="index">
  <tokenizer name="thai"/>
  <filter name="lowercase"/>
</analyzer>

クラス名付き(レガシー)

<analyzer type="index">
  <tokenizer class="solr.ThaiTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

トルコ語

Solrは、solr.SnowballPorterFilterFactoryによるトルコ語のステミング、solr.TurkishLowerCaseFilterFactoryによる大文字と小文字を区別しない検索、solr.ApostropheFilterFactoryによるアポストロフィとそれに続く接尾辞の除去(Role of Apostrophes in Turkish Information Retrievalを参照)、solr.TruncateTokenFilterFactoryによる構成可能な最大長でトークンを切り捨てるステミングの一種(Information Retrieval on Turkish Textsを参照)をサポートしています。また、Luceneには、ストップワードの例リストが含まれています。

ファクトリクラス: solr.TurkishLowerCaseFilterFactory

引数: なし

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="apostrophe"/>
  <filter name="turkishLowercase"/>
  <filter name="snowballPorter" language="Turkish"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ApostropheFilterFactory"/>
  <filter class="solr.TurkishLowerCaseFilterFactory"/>
  <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
</analyzer>

ダイアクリティカルマークを区別しない検索を示す別の例

<analyzer>
  <tokenizer name="standard"/>
  <filter name="apostrophe"/>
  <filter name="turkishLowercase"/>
  <filter name="asciiFoldingFilterFactory" preserveOriginal="true"/>
  <filter name="keywordRepeat"/>
  <filter name="truncate" prefixLength="5"/>
  <filter name="removeDuplicates"/>
</analyzer>

ウクライナ語

Solrは、analysis-extrasモジュール内のsolr.MorphologikFilterFactoryを使用して、ウクライナ語の語彙化をサポートしています。このフィルタを使用するには、analysis-extrasモジュールを有効にする必要があります。

Luceneには、lucene-analyzers-morfologik jarファイル内に、ウクライナ語のストップワードの例リストも含まれています。

ファクトリクラス: solr.MorfologikFilterFactory

引数

dictionary

必須

デフォルト: なし

語彙化辞書のパス。lucene-analyzers-morfologik jarファイルには、org/apache/lucene/analysis/uk/ukrainian.dictにウクライナ語の辞書が含まれています。

名前付き

<analyzer>
  <tokenizer name="standard"/>
  <filter name="stop" words="org/apache/lucene/analysis/uk/stopwords.txt"/>
  <filter name="lowercase"/>
  <filter name="morfologik" dictionary="org/apache/lucene/analysis/uk/ukrainian.dict"/>
</analyzer>

クラス名付き(レガシー)

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" words="org/apache/lucene/analysis/uk/stopwords.txt"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.MorfologikFilterFactory" dictionary="org/apache/lucene/analysis/uk/ukrainian.dict"/>
</analyzer>

Morfologikのdictionaryパラメータ値は、どの辞書を選択するかを指定する定数です。辞書リソースの名前はpath/to/language.dictでなければならず、関連付けられた.infoメタデータファイルが必要です。Morfologikプロジェクトの詳細を参照してください。dictionary属性が指定されていない場合、ポーランド語の辞書がデフォルトでロードされて使用されます。

Analysis Extrasモジュール

上記でリストされている多くの言語機能は、analysis-extras Solrモジュールによってサポートされています。使用前に有効にする必要があります。

必要な特定のjarファイルの詳細については、モジュールのREADMEを参照してください。