Elasticsearch: миграция с Tire на Elasticsearch Persistence

Я хотел бы перейти с драгоценного камня Tire (выйти на пенсию) в драгоценный камень Elasticsearch Persistence, в Tire я использовал для установки параметров индекса внутри модели, как показано ниже.

settings :number_of_shards => 5,
        :number_of_replicas => 1,
        :analysis => {
          :analyzer => {
            :my_pattern => {
               "type"         => "custom",
                "tokenizer" => "keyword",
                 "filter"    =>  ["url_ngram", "lowercase"]
               }
          }, :filter => {
       :url_stop => {
         :type => "stop",
         :stopwords => ["="]
       },
       :url_ngram => {
         :type => "nGram",
         :min_gram => 4,
         :max_gram => 40
       }
       }

        } do
 mapping {

   indexes :msgpriority, :type => 'string',      :analyzer => 'snowball'
   indexes :msghostname, :type => 'string',        :analyzer => 'snowball'
   indexes :msgtext, :type => 'string',        :analyzer => 'my_pattern'
   indexes :msgdatetime,  :type => 'date',       :include_in_all => false
 }
end

Сейчас я использую объект Repository и хочу применить те же настройки (в основном анализатор)

Код ниже не работает, даже когда я меняю количество осколков, как будто я ничего не писал

REPOSITORY = Elasticsearch::Persistence::Repository.new do
# Configure the Elasticsearch client
client Elasticsearch::Client.new url: ENV['ELASTICSEARCH_URL'], log: true
now_time = Time.now
# Set a custom index name
index "ip_logstreams_#{now_time.year}_#{now_time.month}_#{now_time.day}"

# Set a custom document type
type  :log_entry

# Specify the class to inicialize when deserializing documents
klass LogEntry

# Configure the settings and mappings for the Elasticsearch index
settings number_of_shards: 2, :analysis => {
 :analyzer => {
   :my_pattern => {
    "type"         => "custom",
    "tokenizer" => "keyword",
    "filter"    =>  ["url_ngram", "lowercase"]
  }
  }, :filter => {
    :url_stop => {
      :type => "stop",
      :stopwords => ["="]
      },
    :url_ngram => {
      :type => "nGram",
      :min_gram => 4,
      :max_gram => 40
    }
  }

  } do
    mapping {

      indexes :msgpriority, :type => 'string',      :analyzer => 'snowball'
      indexes :msghostname, :type => 'string',        :analyzer => 'snowball'
      indexes :msgtext, :type => 'string',        :analyzer => 'my_pattern'
      indexes :msgdatetime,  :type => 'date',       :include_in_all => false
    }
  end
end

ОБНОВЛЕНИЕ:

Когда я выпускаю

REPOSITORY.create_index! force: true

изменения применяются, но я думаю, что настройки в elasticsearch перепутаны, как показано на снимке экрана (взято из головного плагина) enter image  описание здесь


person Hadi Salem    schedule 29.08.2014    source источник


Ответы (2)


Рассматривали ли вы просто использование elasticsearch/elasticsearch-model - это обеспечивает автоматические обратные вызовы, которые должны помочь вам сохранить данные вокруг.

person Oto Brglez    schedule 29.08.2014
comment
В настоящее время я сохраняю свою модель с Tire, используя include Tire::Model::Persistence, я все еще использую Tire, потому что у него есть возможность поиска по нескольким индексам, в отличие от нового драгоценного камня. - person Hadi Salem; 29.08.2014
comment
Ну, шина устарела и, как следует из ее нового названия, также устарела. Поэтому в долгосрочной перспективе вам следует переключиться на «официальный» гем ElasticSearch или использовать что-то вроде strecher. С другой стороны, Strecher уже поддерживает множественный поиск. Другой вариант - просто сделать поисковый запрос к нескольким индексам "вручную"... $ curl -XGET 'localhost:9200/index_a,index_b/tweet/_search?q=tag:wow' - person Oto Brglez; 29.08.2014
comment
Согласен, но это не решает первоначальную проблему, я обновил вопрос, должны ли настройки выглядеть так или они должны быть представлены в структуре JSON? - person Hadi Salem; 29.08.2014
comment
Вот так обычно выглядят сопоставление/настройки. Я использую заботу, чтобы мой код был чище. - person Oto Brglez; 29.08.2014

При использовании объекта репозитория в геме elasticsearch мы должны выдать

REPOSITORY.create_index!

это создаст индекс с предоставленными настройками, вы можете добавить force: true, если хотите снова создать индекс

person Hadi Salem    schedule 29.08.2014