CharFilters

CharFilter は、入力文字を前処理するコンポーネントです。

CharFilter は、トークンフィルターのように連鎖させることができ、トークナイザーの前に配置できます。CharFilter は、ハイライトなどの機能をサポートするために、元の文字オフセットを保持しながら、文字を追加、変更、または削除できます。

solr.MappingCharFilterFactory

このフィルターは、org.apache.lucene.analysis.MappingCharFilter を作成します。これは、ある文字列を別の文字列に変更するために使用できます(たとえば、ée に正規化する場合など)。

このフィルターでは、実行するマッピングを含むファイルのパスと名前である mapping 引数を指定する必要があります。

名前付きの場合

<analyzer>
  <charFilter name="mapping" mapping="mapping-FoldToASCII.txt"/>
  <tokenizer ...>
  [...]
</analyzer>

クラス名を使用した場合(レガシー)

<analyzer>
  <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-FoldToASCII.txt"/>
  <tokenizer ...>
  [...]
</analyzer>

マッピングファイルの構文

  • ハッシュ記号 (#) で始まるコメント行と、空白行は無視されます。

  • コメントがなく、空白でない各行は、"source" => "target" の形式のマッピングで構成されます。

    • 二重引用符で囲まれたソース文字列、オプションの空白、矢印 (=>)、オプションの空白、二重引用符で囲まれたターゲット文字列。

  • マッピング行の末尾のコメントは許可されていません。

  • ソース文字列には少なくとも 1 つの文字が含まれている必要がありますが、ターゲット文字列は空にすることができます。

  • ソース文字列とターゲット文字列内で、次の文字エスケープシーケンスが認識されます。

    エスケープシーケンス 結果の文字 (ECMA-48 エイリアス) Unicode 文字 マッピング行の例

    \\

    \

    U+005C

    "\\" => "/"

    \"

    "

    U+0022

    "\"and\"" => "'and'"

    \b

    バックスペース (BS)

    U+0008

    "\b" => " "

    \t

    タブ (HT)

    U+0009

    "\t" => ","

    \n

    改行 (LF)

    U+000A

    "\n" => "<br>"

    \f

    改ページ (FF)

    U+000C

    "\f" => "\n"

    \r

    キャリッジリターン (CR)

    U+000D

    "\r" => "/carriage-return/"

    \uXXXX

    4 桁の 16 進数で参照される Unicode 文字

    U+XXXX

    "\uFEFF" => ""

    • バックスラッシュの後に他の文字が続く場合は、バックスラッシュなしで文字が存在する場合と同様に解釈されます。

solr.HTMLStripCharFilterFactory

このフィルターは org.apache.solr.analysis.HTMLStripCharFilter を作成します。この CharFilter は、入力ストリームから HTML を取り除き、結果を別の CharFilter またはトークナイザーに渡します。

このフィルターは

  • HTML/XML タグを削除し、他のコンテンツを保持します。

  • タグ内の属性を削除し、オプションの属性の引用をサポートします。

  • <?foo bar?> のような XML 処理命令を削除します。

  • XML コメントを削除します。

  • <! で始まる XML 要素を削除します。

  • <script> および <style> 要素の内容を削除します。

  • これらの要素内の XML コメントを処理します(通常のコメント処理が常に機能するとは限りません)。

  • &#65; や &#x7f; のような数値文字参照を対応する文字に置換します。

  • 入力の末尾にある場合、終端の ';' はオプションです。そうでない場合は、"Alpha&Omega Corp" のようなものとの誤った一致を避けるために、終端の ';' は必須です。

  • すべての名前付き文字参照を対応する文字に置換します。

  • &nbsp; は 0xa0 文字ではなくスペースに置き換えられます。

  • 改行はブロックレベル要素に置き換えられます。

  • <CDATA> セクションが認識されます。

  • <b><i><span> などのインラインタグは削除されます。

  • quotgtltamp のような大文字の文字参照は、小文字として認識および処理されます。

入力は HTML ドキュメントである必要はありません。フィルターは、HTML のように見える構造のみを削除します。入力に HTML のように見えるものが含まれていない場合、フィルターは入力を削除しません。

以下の表に、HTML の削除例を示します。

入力 出力

my <a href="www.foo.bar">link</a>

my link

<br>hello<!--comment-->

hello

hello<script><!-- f('<!--internal--></script>'); --></script>

hello

if a<b then print a;

if a<b then print a;

hello <td height=22 nowrap align="left">

hello

a<b &#65 Alpha&Omega Ω

a<b A Alpha&Omega Ω

名前付きの場合

<analyzer>
  <charFilter name="htmlStrip"/>
  <tokenizer ...>
  [...]
</analyzer>

クラス名を使用した場合(レガシー)

<analyzer>
  <charFilter class="solr.HTMLStripCharFilterFactory"/>
  <tokenizer ...>
  [...]
</analyzer>

solr.ICUNormalizer2CharFilterFactory

このフィルターは、ICU4J を使用して、トークン化前の Unicode 正規化を実行します。

引数

form

オプション

デフォルト: nfkc_cf

Unicode 正規化形式の 1 つで、nfcnfkc、または nfkc_cf のいずれかです。

mode

オプション

デフォルト: compose

compose または decompose のいずれかです。デフォルトは compose です。NFD または NFKD を取得するには、name="nfc" または name="nfkc" を指定して decompose を使用します。

filter

オプション

デフォルト: []

UnicodeSet パターン。セット外のコードポイントは常に変更されずに残されます。デフォルトは、ヌルセットとして [] であり、フィルタリングはありません(すべてのコードポイントが正規化の対象になります)。

名前付きの場合

<analyzer>
  <charFilter name="icuNormalizer2"/>
  <tokenizer ...>
  [...]
</analyzer>

クラス名を使用した場合(レガシー)

<analyzer>
  <charFilter class="solr.ICUNormalizer2CharFilterFactory"/>
  <tokenizer ...>
  [...]
</analyzer>

solr.PatternReplaceCharFilterFactory

このフィルターは、正規表現を使用して、文字パターンを置換または変更します。

引数

pattern

必須

デフォルト: なし

入力テキストに適用する正規表現パターン。

replacement

必須

デフォルト: なし

一致するパターンを置換するために使用するテキスト。

このフィルターは、スキーマで次のように構成できます。

名前付きの場合

<analyzer>
  <charFilter name="patternReplace"
             pattern="([nN][oO]\.)\s*(\d+)" replacement="$1$2"/>
  <tokenizer ...>
  [...]
</analyzer>

クラス名を使用した場合(レガシー)

<analyzer>
  <charFilter class="solr.PatternReplaceCharFilterFactory"
             pattern="([nN][oO]\.)\s*(\d+)" replacement="$1$2"/>
  <tokenizer ...>
  [...]
</analyzer>

以下の表に、正規表現ベースのパターン置換の例を示します。

入力 パターン 置換 出力 説明

see-ing looking

(\w+)(ing)

$1

see-ing look

単語の末尾から "ing" を削除します。

see-ing looking

(\w+)ing

$1

see-ing look

上記と同じです。2 番目の括弧は省略できます。

No.1 NO. no. 543

[nN][oO]\.\s*(\d+)

#$1

#1 NO. #543

いくつかの文字列リテラルを置換します。

abc=1234=5678

(\w+)=(\d+)=(\d+)

$3=$1=$2

5678=abc=1234

グループの順序を変更します。