使用elasticsearch-rails自动更新索引

时间:2015-01-13 00:40:07

标签: ruby-on-rails autocomplete elasticsearch

我正在使用elasticsearch-rails gem实现完成建议器。一切正常,除了更新或删除。

例如,当我更新文章的标题并尝试再次研究时,仍然存在相同的标题。

我已加入Elasticsearch::Model::Callbacks

型号:

require 'elasticsearch/model'

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

  def self.suggest(query)
    Article.__elasticsearch__.client.suggest(:index => Article.index_name, :body => {
        :suggestions => {
            :text => query,
            :completion => {
                :field => 'suggest'
            }
        }
    })
  end

 settings :index => { :number_of_shards => 1 } do
   mappings :dynamic => 'false' do
     indexes :title, :type => 'string', :analyzer => 'english'
     indexes :suggest, :type => 'completion', :index_analyzer => 'simple', :search_analyzer =>       'simple', :payloads => true
   end
  end

  def as_indexed_json(options={})
    {
        :name => self.title,
        :suggest => {
            :input => [self.title, self.content],
            :output => self.title,
            :payload => {
                :id => self.id,
                :content => self.content
            }
        }
    }
  end
end

控制器:

class ArticlesController < ApplicationController
  def update
    @article = Article.find(params[:id])

    if @article.update_attributes(article_params)
       render :json => @article
    else
       render :json => @article.errors
    end
  end
  # ...
end

1 个答案:

答案 0 :(得分:3)

我们遇到了同样的问题。

更改自动完成数据的唯一方法是调用优化API。 优化将导致段合并。 完成建议器存储在他们自己的数据结构calles FST中。它们不是常规索引的一部分,所以只是刷新不起作用。 用于存储完成建议的数据结构仅在编写新段时在索引时创建。在完全清理之前,所有旧数据都将可用,这仅在合并段时才能得到保证。

所以请致电优化:

http://localhost:9200/indexName/_optimize?max_num_segments=number_of_segments

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/merge-process.html#optimize-api

细分数越少,表现越完美。

然后再次检查。对我而言,它有效!

优化速度慢,I / O很重,所以你不能一直运行它,但可能每天运行一次......

祝你好运!

https://groups.google.com/forum/?fromgroups#!searchin/elasticsearch/completion $ $ 20suggester 20delete / elasticsearch / 8Rfg4kGV0ps / YG0V9jM7JhcJ

http://www.elasticsearch.org/blog/you-complete-me/