相关疑难解决方法(0)

Elasticsearch,Tire和嵌套查询/与ActiveRecord的关联

我正在使用ElasticSearch with Tire来索引和搜索一些ActiveRecord模型,我一直在寻找索引和搜索关联的"正确"方法.我还没有找到对此最好的做法,所以我想问一下是否有人认为他们认为有效的做法.

作为一个示例设置(这是组成但说明了问题),让我们说我们有一本书,有章节.每本书都有一个标题和作者,以及一堆章节.每章都有文字.我们希望将书籍的字段和章节的文本编入索引,以便您可以按作者搜索书籍,也可以搜索包含特定词语的任何书籍.

class Book < ActiveRecord::Base
  include Tire::Model::Search
  include Tire::Model::Callbacks

  has_many :chapters

  mapping do
    indexes :title, :analyzer => 'snowball', :boost => 100
    indexes :author, :analyzer => 'snowball'
    indexes :chapters, type: 'object', properties: {
      chapter_text: { type: 'string', analyzer: 'snowball' }
    }
  end
end

class Chapter < ActiveRecord::Base
  belongs_to :book
end
Run Code Online (Sandbox Code Playgroud)

那么我用以下搜索进行搜索:

s = Book.search do
  query { string query_string }
end
Run Code Online (Sandbox Code Playgroud)

这不起作用,即使看起来索引应该这样做.如果相反我索引:

indexes :chapters, :as => 'chapters.map{|c| c.chapter_text}.join('|'), :analyzer => 'snowball'
Run Code Online (Sandbox Code Playgroud)

这使文本可搜索,但显然它不是一个很好的黑客,它失去了实际的相关对象.我尝试过各种搜索,例如:

s = Book.search do
  query do …
Run Code Online (Sandbox Code Playgroud)

elasticsearch tire

27
推荐指数
1
解决办法
9483
查看次数

标签 统计

elasticsearch ×1

tire ×1