ElasticSearch Rails — настройка пользовательского анализатора

Я использую ElasticSearch в Rails 4 через elasticsearch-rails (https://github.com/elasticsearch/elasticsearch-rails). )

У меня есть модель пользователя с атрибутом электронной почты.

Я пытаюсь использовать токенизатор uax_url_email, описанный в документации:

class User < ActiveRecord::Base
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks

  settings analysis: { analyzer: { whole_email: { tokenizer: 'uax_url_email' } } } do
    mappings dynamic: 'false' do
      indexes :email, analyzer: 'whole_email'
    end
  end

end

Я следовал примерам в вики (https://github.com/elasticsearch/elasticsearch-rails/wiki) и документы модели elasticsearch (https://github.com/elasticsearch/elasticsearch-rails/wiki), которые должны прибыть в этот.

Это не работает. Если я напрямую запрашиваю elasticsearch:

curl -XGET 'localhost:9200/users/_mapping

Он возвращает:

{
  "users": {
    "mappings": {
      "user": {
        "properties": {
          "birthdate": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "created_at": {
            "type": "date",
            "format": "dateOptionalTime"
          },
          "email": {
            "type": "string"
          },
          "first_name": {
            "type": "string"
          },
          "gender": {
            "type": "string"
          },
          "id": {
            "type": "long"
          },
          "last_name": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "updated_at": {
            "type": "date",
            "format": "dateOptionalTime"
          }
        }
      }
    }
  }
}

person Cam Price-Austin    schedule 12.08.2014    source источник


Ответы (1)


Это оказалось проблемой с тем, как я создавал файл index. Я пытался:

User.__elasticsearch__.client.indices.delete index: User.index_name
User.import

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

User.__elasticsearch__.create_index! force: true
User.import
person Cam Price-Austin    schedule 12.08.2014
comment
Господи, это случайно спасло мне жизнь. совершенно не понимал, почему некоторые записи не импортировались. честно говоря, я до сих пор не уверен на 100%, почему ЭТО работает, но простое выполнение User.import без удаления индекса не работает. - person volk; 02.01.2015