ノーマライザー
ノーマライザーは、アナライザーに似ていますが、単一のトークンのみを出力することができます。その結果、トークナイザーを持たず、利用可能な文字フィルターとトークンフィルターのサブセットのみを受け入れます。文字単位で動作するフィルターのみが許可されます。たとえば、小文字化フィルターは許可されますが、キーワード全体を見なければならないステミングフィルターは許可されません。ノーマライザー定義で使用できるフィルターの現在のリストは次のとおりです: arabic_normalization
, asciifolding
, bengali_normalization
, cjk_width
, decimal_digit
, elision
, german_normalization
, hindi_normalization
, indic_normalization
, lowercase
, pattern_replace
, persian_normalization
, scandinavian_folding
, serbian_normalization
, sorani_normalization
, trim
, uppercase
。
Elasticsearchには、lowercase
の組み込みノーマライザーが付属しています。他の形式の正規化には、カスタム構成が必要です。
カスタムノーマライザー
カスタムノーマライザーは、文字フィルターのリストと、トークンフィルターのリストを受け取ります。
Python
resp = client.indices.create(
index="index",
settings={
"analysis": {
"char_filter": {
"quote": {
"type": "mapping",
"mappings": [
"« => \"",
"» => \""
]
}
},
"normalizer": {
"my_normalizer": {
"type": "custom",
"char_filter": [
"quote"
],
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
},
mappings={
"properties": {
"foo": {
"type": "keyword",
"normalizer": "my_normalizer"
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'index',
body: {
settings: {
analysis: {
char_filter: {
quote: {
type: 'mapping',
mappings: [
'« => "',
'» => "'
]
}
},
normalizer: {
my_normalizer: {
type: 'custom',
char_filter: [
'quote'
],
filter: [
'lowercase',
'asciifolding'
]
}
}
}
},
mappings: {
properties: {
foo: {
type: 'keyword',
normalizer: 'my_normalizer'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "index",
settings: {
analysis: {
char_filter: {
quote: {
type: "mapping",
mappings: ['« => "', '» => "'],
},
},
normalizer: {
my_normalizer: {
type: "custom",
char_filter: ["quote"],
filter: ["lowercase", "asciifolding"],
},
},
},
},
mappings: {
properties: {
foo: {
type: "keyword",
normalizer: "my_normalizer",
},
},
},
});
console.log(response);
コンソール
PUT index
{
"settings": {
"analysis": {
"char_filter": {
"quote": {
"type": "mapping",
"mappings": [
"« => \"",
"» => \""
]
}
},
"normalizer": {
"my_normalizer": {
"type": "custom",
"char_filter": ["quote"],
"filter": ["lowercase", "asciifolding"]
}
}
}
},
"mappings": {
"properties": {
"foo": {
"type": "keyword",
"normalizer": "my_normalizer"
}
}
}
}