繁体   English   中英

Elasticsearch with Tire on Rails批量导入和索引问题

[英]Elasticsearch with Tire on Rails bulk import & indexing issue

我有一个基于Elasticsearch和Tire的全文搜索的rails应用程序,它已经在开发一个名为Category的MongoDB模型,但是现在我想基于MongoID Embedded 1-n模型用户添加更复杂的搜索, 这个用户是embeds_many :监视列表

现在我必须批量导入并索引Watchlist中的所有字段,我想知道:

  1. 我怎样才能做到这一点 ?
  2. 只能在没有用户父母字段的情况下索引列表子字段?

嵌入式1-N MongoDB / MongoID模型如下所示:

app / models / user.rb(父母):

class User
  include Mongoid::Document

  include Tire::Model::Search
  include Tire::Model::Callbacks
  index_name 'users'

  field :nickname
  field ... many others

  embeds_many :watchlists
end

app / models / watchlist.rb(嵌入式“很多”孩子们):

class Watchlist
  include Mongoid::Document

  include Tire::Model::Search
  include Tire::Model::Callbacks
  index_name 'watchlists'

  field :html_url
  embedded_in :user
end

关于如何完成任务的任何建议?

更新:这里是mongo shell看到的模型的一大块

    > user = db.users.findOne({'nickname': 'lgs'})
    {
       "_id" : ObjectId("4f76a16cf2a6a12f88cbca43"),
       "encrypted_password" : "",
       "sign_in_count" : 0,
       "provider" : "github",
       "uid" : "1573",
       "name" : "Luca G. Soave",
       "email" : "luca.soave@gmail.com",
       "nickname" : "lgs",
       "watchlists" : [
           {
               "_id" : ObjectId("4f76997f1d41c81173000002"),
               "tags_array" : [ git, peristence ],
               "html_url" : "https://github.com/mojombo/grit",
               "description" : "Grit gives you object oriented read/write access to Git repositories via Ruby.",
               "fork_" : false,
               "forks" : 207,
               "watchers" : 1258,
               "created_at" : ISODate("2007-10-29T14:37:16Z"),
               "pushed_at" : ISODate("2012-01-27T01:05:45Z"),
               "avatar_url" : "https://secure.gravatar.com/avatar/25c7c18223fb42a4c6ae1c8db6f50f9b?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png"
           },
       ...
       ...
    } 

我想索引和查询嵌入式子级监视列表doc拥有的任何字段:

 ... "tags_array", "html_url", "description", "forks" 

但我不希望elasticsearch包含父用户字段:

 ... "uid", "name", "email", "nickname" 

因此,当我查询“git persistence”时,它将查看原始MongoDB的每个“用户”的每个“关注列表”的索引字段。

(对不起这里的单数和复数不匹配,我只是指出了doc对象的名字)

这取决于您希望如何根据查询方式为搜索引擎序列化数据。 请更新问题,我会更新答案。 (另外,最好只删除ES日志,它们在这里不相关。)

我不确定Rake任务如何与Mongo中的嵌入式文档一起使用,以及为什么它似乎在最后“挂起”。 运行任务时,您的数据是否在“用户”索引中?

请注意,当Rake任务不够灵活时,提供自己的索引代码非常容易。 请参阅Tire::Index#import integration tests。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM