Реализация множественного synonym_path для одного индекса в упругом поиске
Я пытаюсь добиться множественного synonym_path
для одного индекса в эластичном поиске.
"settings": {
"index": {
"analysis": {
"analyzer": {
"synonym": {
"tokenizer": "whitespace",
"filter": ["synonym"]
}
},
"filter": {
"bool": {
"should": [{
"synonym": {
"type": "synonym",
"synonyms_path": "synonyms.txt",
"ignore_case": true
}},
{
"synonym": {
"type": "synonym",
"synonyms_path": "synonyms2.txt",
"ignore_case": true
}}]
}
}
}
}
},
"mappings": {
"animals": {
"properties": {
"name": {
"type": "String",
"analyzer": "synonym"
}
}
}
}
Я попробовал фрагмент выше, используя JSON Sense в Chrome, но он сгенерировал TokenFilter [bool] must have a type associated with it
ошибка.
Есть ли другой способ реализовать это?
1 ответ
Решение
filter
раздел в analysis
раздел должен содержать не Query DSL, а определения токена-фильтра.
В вашем случае вам нужно заново создать индекс со следующими настройками:
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"synonyms": {
"tokenizer": "whitespace",
"filter": [
"synonym1",
"synonym2"
]
}
},
"filter": {
"synonym1": {
"type": "synonym",
"synonyms_path": "synonyms.txt",
"ignore_case": true
},
"synonym2": {
"type": "synonym",
"synonyms_path": "synonyms2.txt",
"ignore_case": true
}
}
}
}
},
"mappings": {
"animals": {
"properties": {
"name": {
"type": "string",
"analyzer": "synonyms"
}
}
}
}
}