Как добавить настройки анализатора в ElasticSearch?

Я использую ElasticSearch 1.5.2 и хочу иметь следующие настройки:

"settings": {
"analysis": {
    "filter": {
        "filter_shingle": {
            "type": "shingle",
            "max_shingle_size": 2,
            "min_shingle_size": 2,
            "output_unigrams": false
        },
        "filter_stemmer": {
            "type": "porter_stem",
            "language": "English"
        }
    },
    "tokenizer": {
        "my_ngram_tokenizer": {
            "type": "nGram",
            "min_gram": 1,
            "max_gram": 1
        }
    },
    "analyzer": {
        "ShingleAnalyzer": {
            "tokenizer": "my_ngram_tokenizer",
            "filter": [
                "standard",
                "lowercase",
                "filter_stemmer",
                "filter_shingle"
            ]
        }
    }
  }
}    

Куда мне их добавить? Я имею в виду до создания индекса или после?

Поискав в Интернете, я нашел такой метод, как

client.admin().indices().prepareCreate("temp_index").setSettings(ImmutableSettings.settingsBuilder().loadFromSource((jsonBuilder()
    .startObject()
       .startObject("analysis")
          .startObject("analyzer")......and so on)

Но у меня есть 2 проблемы,

  1. Я получаю ошибку компиляции: метод loadFromSource в типе ImmutableSettings.builder неприменим для аргументов XContentBuilder

  2. Кроме того, я не знаю, как преобразовать мои настройки в этот формат. И где документация, чтобы узнать обо всех этих методах? Я попытался прочитать официальный JAVA API ElasticSearch https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/search.html, но мне не удалось найти ничего о настройке анализаторов. Весь связанный контент, который я нахожу, представлен только в виде REST API, а не в Java API.


person ronilp    schedule 25.05.2015    source источник
comment
Итак, вы хотите добавить настройку с помощью java API? Или напрямую с помощью REST?   -  person progrrammer    schedule 25.05.2015
comment
Я хочу добавить с помощью java API.   -  person ronilp    schedule 25.05.2015
comment
Если бы вы могли предоставить ссылку на документацию по java API для анализаторов, это было бы очень полезно.   -  person ronilp    schedule 25.05.2015


Ответы (1)


XContentBuilder имеют особый синтаксис, их можно использовать для создания объекта json.

Вы можете подписаться на https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index_.html#helpers, чтобы преобразовать вашу строку в формат XContentBuilder.

Если у вас есть та же строка, загруженная в application. Вы просто можете сделать.

    client.admin().indices()
.prepareCreate("index_name").setSettings("{setting _ json _ string }").get()

Просто будет работать.

Если вы хотите узнать, как будет выглядеть json в XContentBuilder, то вот он,

XContentBuilder settingsBuilder = XContentFactory.jsonBuilder()
        .startObject()
            .startObject("analysis")
                .startObject("filter")
                    .startObject("filter_shingle")
                        .field("type","shingle")
                        .field("max_shingle_size",2)
                        .field("min_shingle_size",2)
                        .field("output_unigrams",false)
                    .endObject()
                    .startObject("filter_stemmer")
                        .field("type","porter_stem")
                        .field("language","English")
                    .endObject()
                .endObject()
                .startObject("tokenizer")
                    .startObject("my_ngram_tokenizer")
                        .field("type","nGram")
                        .field("min_gram",1)
                        .field("max_gram",1)
                    .endObject()
                .endObject()
                .startObject("analyzer")
                    .startObject("ShingleAnalyzer")
                        .field("tokenizer","my_ngram_tokenizer")
                        .array("filter","standard","lowercase","filter_stemmer","filter_shingle")
                    .endObject()
                .endObject()
            .endObject()
        .endObject()

client.admin().indices()
.prepareCreate("index_name").setSettings(settingsBuilder).get()
person progrrammer    schedule 25.05.2015
comment
Не могли бы вы предоставить источник, откуда вы взяли это client.admin().indices() .prepareCreate("index_name").setSettings("{setting _ json _ string }").get()? - person ronilp; 25.05.2015
comment
источник ? Если вы спрашиваете меня о документации, то я смотрю на код elasticsearch. - person progrrammer; 25.05.2015
comment
как в исходном коде elasticsearch? Нет документации на него?? - person ronilp; 25.05.2015
comment
Извините, я не думаю, что есть надлежащая документация по Java API. Если вы посмотрите на клиент elasticsearch, класс org.elasticsearch.client.Client, то вы сможете узнать, какие методы доступны. - person progrrammer; 25.05.2015