N-gram tokenizer
ngram
トークナイザーは、指定された文字のリストのいずれかに出会うと、最初にテキストを単語に分解し、その後、指定された長さの各単語の N-grams を生成します。
N-grams は、単語を横切るスライディングウィンドウのようなもので、指定された長さの連続した文字のシーケンスです。これは、スペースを使用しない言語や、ドイツ語のように長い複合語を持つ言語のクエリに役立ちます。
Example output
デフォルト設定では、ngram
トークナイザーは初期テキストを単一のトークンとして扱い、最小長さ 1
と最大長さ 2
の N-grams を生成します:
Python
resp = client.indices.analyze(
tokenizer="ngram",
text="Quick Fox",
)
print(resp)
Ruby
response = client.indices.analyze(
body: {
tokenizer: 'ngram',
text: 'Quick Fox'
}
)
puts response
Js
const response = await client.indices.analyze({
tokenizer: "ngram",
text: "Quick Fox",
});
console.log(response);
Console
POST _analyze
{
"tokenizer": "ngram",
"text": "Quick Fox"
}
上記の文は、次の用語を生成します:
Text
[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]
Configuration
ngram
トークナイザーは、次のパラメータを受け入れます:
min_gram |
グラム内の文字の最小長さ。デフォルトは 1 です。 |
max_gram |
グラム内の文字の最大長さ。デフォルトは 2 です。 |
token_chars |
トークンに含めるべき文字クラス。Elasticsearchは、指定されたクラスに属さない文字で分割します。デフォルトは [] (すべての文字を保持) です。文字クラスは次のいずれかである可能性があります: - letter — 例えば a 、b 、ï または 京 - digit — 例えば 3 または 7 - whitespace — 例えば " " または "\n" - punctuation —例えば ! または " - symbol — 例えば $ または √ - custom — カスタム文字は、custom_token_chars 設定を使用して設定する必要があります。 |
custom_token_chars |
トークンの一部として扱うべきカスタム文字。例えば、これを +-_ に設定すると、トークナイザーはプラス、マイナス、およびアンダースコア記号をトークンの一部として扱います。 |
通常、min_gram
と max_gram
を同じ値に設定することが理にかなっています。長さが小さいほど、より多くのドキュメントが一致しますが、一致の質は低下します。長さが長いほど、一致がより特定的になります。トライグラム(長さ 3
)は、始めるのに良い場所です。
インデックスレベル設定 index.max_ngram_diff
は、max_gram
と min_gram
の間の最大許容差を制御します。
Example configuration
この例では、ngram
トークナイザーを構成して、文字と数字をトークンとして扱い、トライグラム(長さ 3
のグラム)を生成します:
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
},
)
print(resp)
resp1 = client.indices.analyze(
index="my-index-000001",
analyzer="my_analyzer",
text="2 Quick Foxes.",
)
print(resp1)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
my_analyzer: {
tokenizer: 'my_tokenizer'
}
},
tokenizer: {
my_tokenizer: {
type: 'ngram',
min_gram: 3,
max_gram: 3,
token_chars: [
'letter',
'digit'
]
}
}
}
}
}
)
puts response
response = client.indices.analyze(
index: 'my-index-000001',
body: {
analyzer: 'my_analyzer',
text: '2 Quick Foxes.'
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
my_analyzer: {
tokenizer: "my_tokenizer",
},
},
tokenizer: {
my_tokenizer: {
type: "ngram",
min_gram: 3,
max_gram: 3,
token_chars: ["letter", "digit"],
},
},
},
},
});
console.log(response);
const response1 = await client.indices.analyze({
index: "my-index-000001",
analyzer: "my_analyzer",
text: "2 Quick Foxes.",
});
console.log(response1);
Console
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
POST my-index-000001/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
}
上記の例は、次の用語を生成します:
Text
[ Qui, uic, ick, Fox, oxe, xes ]