Как отображения эластичного поиска-рельса переводят в конфигурацию индекса эластичного поиска?

Я использую драгоценный камень asticsearch-rails (asticsearch-model), и меня немного смущает то, как model-dsl в конечном итоге переходит в конфигурацию индекса.

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

require 'elasticsearch'

client = Elasticsearch::Client.new log: true

# edge_ngram settings
settings_with_ngram = {
  "analysis": {
    "filter": {
      "nGram_filter": {
         "type": "nGram",
         "min_gram": 3,
         "max_gram": 8,
         "token_chars": [
            "letter",
            "digit",
            "punctuation",
            "symbol"
         ]
      }
    },
    "analyzer": {
      "nGram_analyzer": {
         "type": "custom",
         "tokenizer": "whitespace",
         "filter": [
            "lowercase",
            "asciifolding",
            "nGram_filter"
         ]
      },
      "whitespace_analyzer": {
         "type": "custom",
         "tokenizer": "whitespace",
         "filter": [
            "lowercase",
            "asciifolding"
         ]
      }
    }
  }
}

# item
client.indices.delete index: "test_matchables"
client.indices.create index: "test_matchables", body: {
  settings: settings_with_ngram,

  mappings: {
    matchable: {
      "_all": {
         "analyzer": "nGram_analyzer",
         "search_analyzer": "whitespace_analyzer"
      }
    }
  }
}

Однако, когда я (пытаюсь) сделать то же самое в модели, я получаю ошибку:

  elasticsearch_settings = {
    index: {
      number_of_shards: 1,
      number_of_replicas: 0
    },
    analysis: {
      filter: {
        nGram_filter: {
           type: "nGram",
           min_gram: 3,
           max_gram: 8,
           token_chars: [
              "letter",
              "digit",
              "punctuation",
              "symbol"
           ]
        }
      },
      analyzer: {
        nGram_analyzer: {
           type: "custom",
           tokenizer: "whitespace",
           filter: [
              "lowercase",
              "asciifolding",
              "nGram_filter"
           ]
        },
        whitespace_analyzer: {
           type: "custom",
           tokenizer: "whitespace",
           filter: [
              "lowercase",
              "asciifolding"
           ]
        }
      }
    }
  }

  settings(elasticsearch_settings) do
    mappings do
      indexes :_all, analyzer: 'nGram_analyzer', search_analyzer: 'whitespace_analyzer'
    end
  end

Сообщение об ошибке:

MapperParsingException[Failed to parse mapping [matchable]: Field [_all] is defined twice in [matchable]]; nested: IllegalArgumentException[Field [_all] is defined twice in [matchable]];

Было бы уже полезно, если бы я мог привести модель asticsearch (oder эластичный поиск), чтобы показать мне весь запрос, отправляемый в эластичный поиск при создании этого индекса.

Спасибо за любые предложения:)

0 ответов

Другие вопросы по тегам