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"
        }
      }
    }
  }
}
Другие вопросы по тегам