Elasticsearch при обновлении анализатора создает поле участников

Я столкнулся с проблемой, когда мне нужно было обновить стоп-слова в индексе, который указывал английский анализатор как анализатор по умолчанию. Обычно анализаторы указываются в настройках индекса:

{
  "twitter": {
    "settings": {
      "index": {
        "creation_date": "1469465586110",
        "analysis": {
          "filter": {
            "lowercaseFilter": {
              "type": "lowercase"
            }
          },
          "analyzer": {
            "default": {
              "type": "english"
            },
...

Итак, анализаторы расположены по адресу <index name>.settings.index.analysis.analyzer

Чтобы обновить анализатор, я выполнил следующие команды:

curl -XPOST "http://localhost:9200/twitter/_close" && \
curl -XPUT "http://localhost:9200/twitter/_settings" -d'
{
    "analysis": {
        "analyzer": {
            "default": {
                "type": "english",
                "stopwords": "_none_"
            }
        }
    }
}' && \
curl -XPOST "http://localhost:9200/twitter/_open"

После запуска этих команд я убедился, что анализатор по умолчанию анализирует текст и сохраняет все стоп-слова.

Однако, когда я использую клиент Jest, теперь настройки выглядят так, и анализ не происходит должным образом (обратите внимание, что настройки анализа теперь находятся в свойстве «members»):

{
  "twitter": {
    "settings": {
      "index": {
        "members": {
          "analysis": {
            "analyzer": {
              "default": {
                "type": "english",
                "stopwords": "_none_"
              },

Я просмотрел код, и все выглядит в порядке: intellij debug Jest UpdateSettings payload


person BrDaHa    schedule 05.08.2016    source источник


Ответы (1)


Я понял. Итак, запустив:

sudo tcpflow -p -c -i lo0 port 9200 2>/dev/null | grep -oE '.*(GET|POST|PUT|DELETE) .*_dev.*' -A30

Я мог видеть, что JsonObject, который я отправлял, включал поле members, где JsonObject Gson хранит объекты внутри себя. Поскольку я передал этот необработанный объект в конструктор Jest UpdateSettings, он сериализовался неожиданным образом (включая поле members) и таким образом отправлялся в elasticsearch. Я решил проблему, вызвав метод toString() JsonObject и передав его UpdateSettings Builder.

person BrDaHa    schedule 06.08.2016