我正在使用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
答案 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