Hunspell トークンフィルター
提供された Hunspell 辞書 に基づいて 辞書ステミング を行います。 hunspell
フィルターは、1つ以上の言語特有の Hunspell 辞書の 設定 を必要とします。
このフィルターは Lucene の HunspellStemFilter を使用します。
利用可能な場合は、hunspell
トークンフィルターを使用する前に、言語に対してアルゴリズムステマーを試すことをお勧めします。実際には、アルゴリズムステマーは通常、辞書ステマーよりも優れた性能を発揮します。辞書ステマーを参照してください。
Hunspell 辞書の設定
Hunspell 辞書は、ファイルシステム上の専用 hunspell
ディレクトリに保存され、検出されます: <$ES_PATH_CONF>/hunspell
。各辞書は、関連する言語とロケールにちなんで名付けられた独自のディレクトリを持つことが期待されます(例: pt_BR
, en_GB
)。この辞書ディレクトリには、単一の .aff
と1つ以上の .dic
ファイルが含まれていることが期待されており、すべて自動的に取得されます。たとえば、次のディレクトリ構成は en_US
辞書を定義します:
Txt
- config
|-- hunspell
| |-- en_US
| | |-- en_US.dic
| | |-- en_US.aff
各辞書は1つの設定で構成できます:
ignore_case
- (静的、ブール値) true の場合、辞書の一致は大文字と小文字を区別しません。デフォルトは
false
です。
この設定はelasticsearch.yml
でindices.analysis.hunspell.dictionary.ignore_case
を使用してグローバルに設定できます。
特定のロケールの設定を構成するには、indices.analysis.hunspell.dictionary.<locale>.ignore_case
設定を使用します(例:en_US
(アメリカ英語) ロケールの場合、設定はindices.analysis.hunspell.dictionary.en_US.ignore_case
です)。
辞書ディレクトリの下にこれらの設定を保持するsettings.yml
ファイルを追加することもできます。これにより、elasticsearch.yml
で定義された他のignore_case
設定が上書きされます。
例
次の分析 API リクエストは、hunspell
フィルターを使用して the foxes jumping quickly
を the fox jump quick
にステムします。
リクエストは en_US
ロケールを指定しており、.aff
および .dic
ファイルが <$ES_PATH_CONF>/hunspell/en_US
ディレクトリで Hunspell 辞書に使用されます。
Python
resp = client.indices.analyze(
tokenizer="standard",
filter=[
{
"type": "hunspell",
"locale": "en_US"
}
],
text="the foxes jumping quickly",
)
print(resp)
Js
const response = await client.indices.analyze({
tokenizer: "standard",
filter: [
{
type: "hunspell",
locale: "en_US",
},
],
text: "the foxes jumping quickly",
});
console.log(response);
コンソール
GET /_analyze
{
"tokenizer": "standard",
"filter": [
{
"type": "hunspell",
"locale": "en_US"
}
],
"text": "the foxes jumping quickly"
}
フィルターは次のトークンを生成します:
テキスト
[ the, fox, jump, quick ]
設定可能なパラメータ
dictionary
- (オプション、文字列または文字列の配列) Hunspell 辞書に使用する1つ以上の
.dic
ファイル(例:en_US.dic, my_custom.dic
)。
デフォルトでは、hunspell
フィルターは<$ES_PATH_CONF>/hunspell/<locale>
ディレクトリ内のすべての.dic
ファイルを使用します。lang
、language
、またはlocale
パラメータを使用して指定します。 dedup
- (オプション、ブール値)
true
の場合、重複トークンはフィルターの出力から削除されます。デフォルトはtrue
です。 lang
- (必須*、文字列)
locale
パラメータ のエイリアス。
このパラメータが指定されていない場合、language
またはlocale
パラメータが必要です。 language
(必須*、文字列)
locale
パラメータ のエイリアス。
このパラメータが指定されていない場合、lang
またはlocale
パラメータが必要です。locale
- (必須*、文字列) Hunspell 辞書の
.aff
および.dic
ファイルを指定するために使用されるロケールディレクトリ。 Hunspell 辞書の設定 を参照してください。
このパラメータが指定されていない場合、lang
またはlanguage
パラメータが必要です。 longest_only
- (オプション、ブール値)
true
の場合、各トークンの最も長いステムバージョンのみが出力に含まれます。false
の場合、トークンのすべてのステムバージョンが含まれます。デフォルトはfalse
です。
アナライザーのカスタマイズと追加
hunspell
フィルターをカスタマイズするには、それを複製して新しいカスタムトークンフィルターの基礎を作成します。設定可能なパラメータを使用してフィルターを変更できます。
たとえば、次の インデックス作成 API リクエストは、カスタム hunspell
フィルター my_en_US_dict_stemmer
を使用して新しい カスタムアナライザー を構成します。
my_en_US_dict_stemmer
フィルターは locale
の en_US
を使用し、.aff
および .dic
ファイルが <$ES_PATH_CONF>/hunspell/en_US
ディレクトリで使用されます。フィルターには dedup
引数 false
も含まれており、辞書から追加された重複トークンはフィルターの出力から削除されません。
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"en": {
"tokenizer": "standard",
"filter": [
"my_en_US_dict_stemmer"
]
}
},
"filter": {
"my_en_US_dict_stemmer": {
"type": "hunspell",
"locale": "en_US",
"dedup": False
}
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
en: {
tokenizer: 'standard',
filter: [
'my_en_US_dict_stemmer'
]
}
},
filter: {
"my_en_US_dict_stemmer": {
type: 'hunspell',
locale: 'en_US',
dedup: false
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
en: {
tokenizer: "standard",
filter: ["my_en_US_dict_stemmer"],
},
},
filter: {
my_en_US_dict_stemmer: {
type: "hunspell",
locale: "en_US",
dedup: false,
},
},
},
},
});
console.log(response);
コンソール
PUT /my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"en": {
"tokenizer": "standard",
"filter": [ "my_en_US_dict_stemmer" ]
}
},
"filter": {
"my_en_US_dict_stemmer": {
"type": "hunspell",
"locale": "en_US",
"dedup": false
}
}
}
}
}
設定
ignore_case
設定 に加えて、hunspell
フィルターのために elasticsearch.yml
を使用して次のグローバル設定を構成できます:
indices.analysis.hunspell.dictionary.lazy
- (静的、ブール値)
true
の場合、Hunspell 辞書の読み込みは辞書が使用されるまで遅延されます。false
の場合、ノードが起動するときに辞書ディレクトリが辞書のためにチェックされ、辞書が自動的に読み込まれます。デフォルトはfalse
です。