Elastic Search - передайте синоним при создании индекса
Я пытаюсь использовать функцию синонимов в упругом поиске
Ниже моя упругая конфигурация поиска
<elasticsearch:node-client id="client" local="true"/>
<bean name="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="client"/>
</bean>
В соответствии с документацией упоминается размещение файла синонимов относительно каталога конфигурации Elastic Search.
Но в моем случае я хочу передать текст синонима программно при создании индекса. У пользователя будет возможность добавить дополнительные записи в файл синонимов, и приложение обновит индекс и снова проанализирует данные, используя обновленный файл синонимов.
При создании индекса есть возможность передать настройки
elasticSearchTemplate.createIndex(MyClass.class , Map settings )
например: elasticsearchTemplate.createIndex(Entity.class, "max_result_window = 15000");
Но настройка синонима находится внутри модуля Analyzer.
Пожалуйста, верните обратно, если это можно передать как настройки при создании индекса
1 ответ
Самое близкое решение, которое я нашел, ниже.
@Document(indexName = "myindex", type = "mytype")
@Setting(settingPath = "/mysetting/mysetting.json")
public class Employee implements Serializable {
@Id
private String employeeId;
@Field(type = FieldType.String, analyzer = "synonym_analyzer")
private String transformedTitle ;
Ниже находится mysetting.json
{
"index": {
"number_of_shards": "1",
"number_of_replicas": "0",
"analysis": {
"analyzer": {
"synonym_analyzer": {
"tokenizer": "whitespace",
"filter": [
"synonym_filter"
]
}
},
"filter": {
"synonym_filter": {
"type": "synonym",
"synonyms": [
"english,british",
],
"ignore_case": "true"
}
}
}
}
}