我正在使用搜索API,现在需要添加completion suggester,我正在使用elasticsearch-rails gem。

当我搜索文章时,一切正常
http://localhost:9200/articles/_search

  "query": {
    "multi_match": {
      "query": "test",
      "fields": [
        "title", "tags", "content"
      ]
    }
  }
}

但是,由于我已经实现了完成建议程序,因此我不得不编辑as_indexed_json使其起作用,但是现在搜索API不再起作用,仅起作用。

这是我的文章模型:
  def self.search(query)
    __elasticsearch__.search(
        {
            query: {
                multi_match: {
                    query: query,
                    fields: ['title', 'content', 'tags']
                }
            }
        })
end

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

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

_search和_suggest是否可以与同一模型一起工作?

最佳答案

我只是在研究Elasticsearch,但是据我所知,您可以添加您在序列化器函数中进行修改并重新创建索引之前所拥有的内容,它们将在db中很好地结合在一起。例如:

def as_indexed_json(options={})
       {
           :name => self.title,
            :suggest => {
                :input => self.title,
                :output => self.title,
                :payload => {
                    :content => self.content,
                    :tags => self.tags,
                    :title => self.title
                }
            }
        }.as_json.merge(self.as_json) # or the customized hash you used

为了避免索引冗余,您可以查看aliases and routing

关于ruby-on-rails - rails-Elasticsearch完成建议和搜索API,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28884673/

10-13 07:01