同義語セットの作成または更新
同義語セットを作成または更新します。
同義語セットは、セットごとに最大10,000の同義語ルールに制限されています。より多くの同義語ルールを管理する必要がある場合は、複数の同義語セットを作成できます。
リクエスト
PUT _synonyms/<synonyms_set>
前提条件
manage_search_synonyms
クラスター権限が必要です。
パスパラメータ
<synonyms_set>
- (必須、文字列) 作成する同義語セットの識別子。この識別子は、他の 同義語API によって同義語セットを管理するために使用されます。
リクエストボディ
synonyms_set
- (必須、同義語ルールオブジェクトの配列) 同義語セットの同義語ルール定義。
synonyms_set
オブジェクトのプロパティ
id
- (オプション、文字列) 同義語ルールに関連付けられた識別子で、同義語ルールAPIを介して個々の同義語ルールを管理するために使用できます。同義語ルールIDが指定されていない場合、Elasticsearchによって自動的に識別子が作成されます。
synonyms
- (必須、文字列) 同義語ルール。このルールはSolr形式である必要があります。いくつかの例は次のとおりです:
- “\
例
次の例は、my-synonyms-set
という新しい同義語セットを作成します:
Python
resp = client.synonyms.put_synonym(
id="my-synonyms-set",
synonyms_set=[
{
"id": "test-1",
"synonyms": "hello, hi"
},
{
"synonyms": "bye, goodbye"
},
{
"id": "test-2",
"synonyms": "test => check"
}
],
)
print(resp)
Ruby
response = client.synonyms.put_synonym(
id: 'my-synonyms-set',
body: {
synonyms_set: [
{
id: 'test-1',
synonyms: 'hello, hi'
},
{
synonyms: 'bye, goodbye'
},
{
id: 'test-2',
synonyms: 'test => check'
}
]
}
)
puts response
Js
const response = await client.synonyms.putSynonym({
id: "my-synonyms-set",
synonyms_set: [
{
id: "test-1",
synonyms: "hello, hi",
},
{
synonyms: "bye, goodbye",
},
{
id: "test-2",
synonyms: "test => check",
},
],
});
console.log(response);
コンソール
PUT _synonyms/my-synonyms-set
{
"synonyms_set": [
{
"id": "test-1",
"synonyms": "hello, hi"
},
{
"synonyms": "bye, goodbye"
},
{
"id": "test-2",
"synonyms": "test => check"
}
]
}
含まれている同義語ルールのいずれかが無効な場合、APIはエラーを返します。
Python
resp = client.synonyms.put_synonym(
id="my-synonyms-set",
synonyms_set=[
{
"synonyms": "hello => hi => howdy"
}
],
)
print(resp)
Js
const response = await client.synonyms.putSynonym({
id: "my-synonyms-set",
synonyms_set: [
{
synonyms: "hello => hi => howdy",
},
],
});
console.log(response);
コンソール
PUT _synonyms/my-synonyms-set
{
"synonyms_set": [
{
"synonyms": "hello => hi => howdy"
}
]
}
コンソール-結果
{
"error": {
"root_cause": [
{
"type": "action_request_validation_exception",
"reason": "Validation Failed: 1: More than one explicit mapping specified in the same synonyms rule: [hello => hi => howdy];",
"stack_trace": ...
}
],
"type": "action_request_validation_exception",
"reason": "Validation Failed: 1: More than one explicit mapping specified in the same synonyms rule: [hello => hi => howdy];",
"stack_trace": ...
},
"status": 400
}
アナライザーのリロード
既存の同義語セットが更新されると、同義語セットを使用する検索アナライザーがすべてのインデックスに対して自動的にリロードされます。これは、同義語セットを使用するすべてのインデックスに対して検索アナライザーのリロードAPIを呼び出すことに相当します。
たとえば、同義語セットを持つインデックスを作成し、それを更新すること:
Python
resp = client.synonyms.put_synonym(
id="my-synonyms-set",
synonyms_set=[
{
"id": "test-1",
"synonyms": "hello, hi"
}
],
)
print(resp)
resp1 = client.indices.create(
index="test-index",
settings={
"analysis": {
"filter": {
"synonyms_filter": {
"type": "synonym_graph",
"synonyms_set": "my-synonyms-set",
"updateable": True
}
},
"analyzer": {
"my_index_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase"
]
},
"my_search_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"synonyms_filter"
]
}
}
}
},
mappings={
"properties": {
"title": {
"type": "text",
"analyzer": "my_index_analyzer",
"search_analyzer": "my_search_analyzer"
}
}
},
)
print(resp1)
resp2 = client.synonyms.put_synonym(
id="my-synonyms-set",
synonyms_set=[
{
"id": "test-1",
"synonyms": "hello, hi, howdy"
}
],
)
print(resp2)
Ruby
response = client.synonyms.put_synonym(
id: 'my-synonyms-set',
body: {
synonyms_set: [
{
id: 'test-1',
synonyms: 'hello, hi'
}
]
}
)
puts response
response = client.indices.create(
index: 'test-index',
body: {
settings: {
analysis: {
filter: {
synonyms_filter: {
type: 'synonym_graph',
synonyms_set: 'my-synonyms-set',
updateable: true
}
},
analyzer: {
my_index_analyzer: {
type: 'custom',
tokenizer: 'standard',
filter: [
'lowercase'
]
},
my_search_analyzer: {
type: 'custom',
tokenizer: 'standard',
filter: [
'lowercase',
'synonyms_filter'
]
}
}
}
},
mappings: {
properties: {
title: {
type: 'text',
analyzer: 'my_index_analyzer',
search_analyzer: 'my_search_analyzer'
}
}
}
}
)
puts response
response = client.synonyms.put_synonym(
id: 'my-synonyms-set',
body: {
synonyms_set: [
{
id: 'test-1',
synonyms: 'hello, hi, howdy'
}
]
}
)
puts response
Js
const response = await client.synonyms.putSynonym({
id: "my-synonyms-set",
synonyms_set: [
{
id: "test-1",
synonyms: "hello, hi",
},
],
});
console.log(response);
const response1 = await client.indices.create({
index: "test-index",
settings: {
analysis: {
filter: {
synonyms_filter: {
type: "synonym_graph",
synonyms_set: "my-synonyms-set",
updateable: true,
},
},
analyzer: {
my_index_analyzer: {
type: "custom",
tokenizer: "standard",
filter: ["lowercase"],
},
my_search_analyzer: {
type: "custom",
tokenizer: "standard",
filter: ["lowercase", "synonyms_filter"],
},
},
},
},
mappings: {
properties: {
title: {
type: "text",
analyzer: "my_index_analyzer",
search_analyzer: "my_search_analyzer",
},
},
},
});
console.log(response1);
const response2 = await client.synonyms.putSynonym({
id: "my-synonyms-set",
synonyms_set: [
{
id: "test-1",
synonyms: "hello, hi, howdy",
},
],
});
console.log(response2);
コンソール
PUT _synonyms/my-synonyms-set
{
"synonyms_set": [
{
"id": "test-1",
"synonyms": "hello, hi"
}
]
}
PUT /test-index
{
"settings": {
"analysis": {
"filter": {
"synonyms_filter": {
"type": "synonym_graph",
"synonyms_set": "my-synonyms-set",
"updateable": true
}
},
"analyzer": {
"my_index_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase"]
},
"my_search_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "synonyms_filter"]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_index_analyzer",
"search_analyzer": "my_search_analyzer"
}
}
}
}
PUT _synonyms/my-synonyms-set
{
"synonyms_set": [
{
"id": "test-1",
"synonyms": "hello, hi, howdy"
}
]
}
コンソール-結果
{
"result": "updated",
"reload_analyzers_details": {
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"reload_details": [
{
"index": "test-index",
"reloaded_analyzers": [
"my_search_analyzer"
],
"reloaded_node_ids": [
"1wYFZzq8Sxeu_Jvt9mlbkg"
]
}
]
}
}