Настройка поля ключевого слова в elasticsearch

Я обновил Rails с 4 до 5.2, а также обновил elasticsearch с 2.4 до 6.8.

Ниже приведена ошибка, которую я получаю.

[400] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [activity_type] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."}]

Вот как выглядит запрос*:

activity_types=>{:terms=>{:field=>"activity_type"}}

Взгляните на файл activity_search.rb:

class ActivitySearch < Search::Model
  include DateSearch
  apply_date_filters
  apply_date_aggregations

  filters :activity_types, type: :terms, field: :activity_type, aggregate: false

  aggregates :activity_types, :subject_ids, :levels

  ....

Взгляните на model.rb:

module Search
  class Model
    def add_aggregation(name, opts = {})
      self._aggregations = _aggregations.deep_merge({name.to_sym => opts})
      return if method_defined? "aggregate_#{name}" 
      define_method "aggregate_#{name}" do |config = {}|
      type = config.delete(:type){ :terms }
      field = config.delete(:field){ name.to_s.singularize }
      Search::Aggregation.new(type, field, opts)
    end

    def response
      @response ||= Search::Response.new(search.response)
    end

    def request
      @request ||= build_request
    end

    def search
      @search ||= run_search
    end

    private

    def run_search
      search_class.search(request.params)
    end

    def search_class
      self.class.name.demodulize.gsub('Search', '').safe_constantize
    end

    def build_request
      request = Search::Request.new
      request.query(*queries)
      request.filter(*filters)
      request.aggregate(aggregations)
      request.sort(*sorts)
      request
    end
  end

Activity_search_facade.rb:

class Companies::ActivitySearchFacade < SimpleDelegator
  delegate :aggregations, to: :response
end

Может кто-нибудь помочь решить эту ошибку?

Обратите внимание, что версия elasticsearch-rails gem — 6.0.0.

Дайте мне знать, если вам нужен еще код.

* Как изменить этот запрос, чтобы он правильно работал с версией 6?

ОБНОВИТЬ

Может ли это быть что-то около этого на основе ошибки, которую я получаю?

curl -X GET 'localhost:9200/development_activities'

  "activity_type":{"type":"text" }

Как изменить это на type: "keyword"? ^

Следовали ли вы руководству по миграции elasticsearch?

Deepak Mahakale 27.06.2019 11:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
664
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Пожалуйста, проверьте свою версию elasticsearch, так как версии elasticsearch-rails gem следуют за номером версии elasticsearch, и при обновлении elasticsearch-rails он может не работать с более ранней версией elastic-search.

проверить здесь

Извините, я указал неправильную версию elasticsearch в вопросе - обновите до 6.8.

ihtishaam ahmed 12.06.2019 13:16

@ihtishaamahmed В вашем вопросе указано 6,8 в заголовке, 6,8 в верхней части тела и 6,0 в нижней части тела.

Tom Lord 12.06.2019 14:17

@TomLord Да, 6.0 — это версия elasticsearch-rails gem, а elasticsearch — 6.8.

ihtishaam ahmed 12.06.2019 15:11
Ответ принят как подходящий

Итак, модель деятельности выглядела так:

class Activity < ApplicationRecord
  include SearchCommon

вот как выглядел search_common.rb:

module SearchCommon
  extend ActiveSupport::Concern

  included do
    include Elasticsearch::Model

    after_commit on: [:create, :update] do
      __elasticsearch__.index_document
    end

    after_commit on: [:destroy] do
      __elasticsearch__.delete_document
    end

    index_name [Rails.env, model_name.collection].join('_')
  end
end

Поэтому я просто добавил:

module SearchCommon
  extend ActiveSupport::Concern

  included do
    include Elasticsearch::Model

    after_commit on: [:create, :update] do
      __elasticsearch__.index_document
    end

    after_commit on: [:destroy] do
      __elasticsearch__.delete_document
    end

    mapping do # ADDITION 
     indexes :activity_type, type: 'keyword' # ADDITION
    end # ADDITION 

    index_name [Rails.env, model_name.collection].join('_')
  end
end

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