4

我有一个带有 ActiveRecord 模型的 Rails 应用程序,它们之间有关联。

为了简单起见,假设我的数据库架构与 - https://github.com/elastic/elasticsearch-rails/blob/master/elasticsearch-model/examples/activerecord_associations.rb#L95完全相同

我想搜索名为“John”的文章作者。

Article.search('john')按预期在article.authors的指定字段 first_name 和 last_name 中搜索。

我想更具体地说,从文章到 article.authors 仅按名字搜索。

Article.search(authors: {first_name: 'john'})不起作用。

执行上述操作的正确方法是什么?

同样使用 Elastic HQ,在文章索引中有字段authors。这是否意味着 elasticsearch-rails 索引是正确的和嵌套的作者? 弹性总部文章映射

4

1 回答 1

6

我假设您有可访问且有效的 ElasticSearch 实例。如果您想对嵌套实体使用查询,则必须使用chewygem 提供的接口,即定义自定义索引字段。这是来自香草文档的示例。首先你需要创建/app/chewy/article_index.rb

class ArticleIndex < Chewy::Index
  define_type Article.published.includes(:author_name) do
    # `published` above is example scope of published-only articles
    # I guess you may have :title and :body fields in model
    field :title, :body
    # Here is custom index field with *full* author name.
    # We use lambda to extract it from article:
    field :author_name, value: ->(article) { "#{article.author.first_name} #{article.author.last_name}" }
  end
end

现在查询它:

UsersIndex.query(text: {author_name: 'John'})
# or
UsersIndex.query(text: {author_name: 'Smith'})
# or even ...
UsersIndex.query(text: {author_name: 'John Smith'}) 

更多阅读:

干杯!

于 2015-09-14T08:23:41.910 回答