アナライザーの指定
Elasticsearchは、組み込みまたはカスタムアナライザーを指定するためのさまざまな方法を提供します:
text
フィールド、インデックス、またはクエリによって- インデックスまたは検索時
シンプルに保つ
異なるレベルや異なる時間でアナライザーを指定する柔軟性は素晴らしいですが… 必要なときだけです。
ほとんどの場合、シンプルなアプローチが最適です:各 text
フィールドにアナライザーを指定します。これは、フィールドのアナライザーを指定するで概説されています。
このアプローチは、Elasticsearchのデフォルトの動作とよく合い、インデックス作成と検索に同じアナライザーを使用できます。また、マッピング取得APIを使用して、どのアナライザーがどのフィールドに適用されるかをすぐに確認できます。
通常、インデックスのマッピングを作成しない場合は、インデックステンプレートを使用して同様の効果を得ることができます。
Elasticsearchがインデックスアナライザーを決定する方法
Elasticsearchは、次のパラメーターを順番にチェックすることによって、使用するインデックスアナライザーを決定します:
- 1. フィールドの
analyzer
マッピングパラメーター。 フィールドのアナライザーを指定するを参照してください。 - 2.
analysis.analyzer.default
インデックス設定。 インデックスのデフォルトアナライザーを指定するを参照してください。
これらのパラメーターが指定されていない場合、standard
アナライザーが使用されます。
フィールドのアナライザーを指定する
インデックスをマッピングする際に、analyzer
マッピングパラメーターを使用して、各 text
フィールドのアナライザーを指定できます。
次のインデックス作成APIリクエストは、whitespace
アナライザーを title
フィールドのアナライザーとして設定します。
Python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"title": {
"type": "text",
"analyzer": "whitespace"
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
title: {
type: 'text',
analyzer: 'whitespace'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
title: {
type: "text",
analyzer: "whitespace",
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "whitespace"
}
}
}
}
インデックスのデフォルトアナライザーを指定する
フィールドレベルのアナライザーに加えて、analysis.analyzer.default
設定を使用してフォールバックアナライザーを設定できます。
次のインデックス作成APIリクエストは、simple
アナライザーを my-index-000001
のフォールバックアナライザーとして設定します。
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"default": {
"type": "simple"
}
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
default: {
type: 'simple'
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
default: {
type: "simple",
},
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"type": "simple"
}
}
}
}
}
Elasticsearchが検索アナライザーを決定する方法
ほとんどの場合、異なる検索アナライザーを指定する必要はありません。そうすることで、関連性に悪影響を及ぼし、予期しない検索結果が得られる可能性があります。
別の検索アナライザーを指定することを選択した場合は、運用環境に展開する前に、分析設定を徹底的にテストすることをお勧めします。
検索時に、Elasticsearchは次のパラメーターを順番にチェックして、使用するアナライザーを決定します:
- 1. 検索クエリの
analyzer
パラメーター。 クエリの検索アナライザーを指定するを参照してください。 - 2. フィールドの
search_analyzer
マッピングパラメーター。 フィールドの検索アナライザーを指定するを参照してください。 - 3.
analysis.analyzer.default_search
インデックス設定。 インデックスのデフォルト検索アナライザーを指定するを参照してください。 - 4. フィールドの
analyzer
マッピングパラメーター。 フィールドのアナライザーを指定するを参照してください。
これらのパラメーターが指定されていない場合、standard
アナライザーが使用されます。
クエリの検索アナライザーを指定する
analyzer
を使用して、フルテキストクエリを記述する際に、検索アナライザーを指定できます。指定された場合、これは他の検索アナライザーを上書きします。
次の検索APIリクエストは、[stop
] アナライザーをmatch
クエリの検索アナライザーとして設定します。
Python
resp = client.search(
index="my-index-000001",
query={
"match": {
"message": {
"query": "Quick foxes",
"analyzer": "stop"
}
}
},
)
print(resp)
Ruby
response = client.search(
index: 'my-index-000001',
body: {
query: {
match: {
message: {
query: 'Quick foxes',
analyzer: 'stop'
}
}
}
}
)
puts response
Js
const response = await client.search({
index: "my-index-000001",
query: {
match: {
message: {
query: "Quick foxes",
analyzer: "stop",
},
},
},
});
console.log(response);
Console
GET my-index-000001/_search
{
"query": {
"match": {
"message": {
"query": "Quick foxes",
"analyzer": "stop"
}
}
}
}
フィールドの検索アナライザーを指定する
インデックスをマッピングする際に、search_analyzer
マッピングパラメーターを使用して、各 text
フィールドの検索アナライザーを指定できます。
検索アナライザーが提供される場合、インデックスアナライザーもanalyzer
パラメーターを使用して指定する必要があります。
次のインデックス作成APIリクエストは、simple
アナライザーを title
フィールドの検索アナライザーとして設定します。
Python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"title": {
"type": "text",
"analyzer": "whitespace",
"search_analyzer": "simple"
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
title: {
type: 'text',
analyzer: 'whitespace',
search_analyzer: 'simple'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
title: {
type: "text",
analyzer: "whitespace",
search_analyzer: "simple",
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "whitespace",
"search_analyzer": "simple"
}
}
}
}
インデックスのデフォルト検索アナライザーを指定する
インデックスを作成する際に、analysis.analyzer.default_search
設定を使用してデフォルトの検索アナライザーを設定できます。
検索アナライザーが提供される場合、デフォルトのインデックスアナライザーもanalysis.analyzer.default
設定を使用して指定する必要があります。
次のインデックス作成APIリクエストは、whitespace
アナライザーを my-index-000001
インデックスのデフォルト検索アナライザーとして設定します。
Python
resp = client.indices.create(
index="my-index-000001",
settings={
"analysis": {
"analyzer": {
"default": {
"type": "simple"
},
"default_search": {
"type": "whitespace"
}
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
settings: {
analysis: {
analyzer: {
default: {
type: 'simple'
},
default_search: {
type: 'whitespace'
}
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
settings: {
analysis: {
analyzer: {
default: {
type: "simple",
},
default_search: {
type: "whitespace",
},
},
},
},
});
console.log(response);
Console
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"default": {
"type": "simple"
},
"default_search": {
"type": "whitespace"
}
}
}
}
}