新手问题 关于 ElasticSearch 的疑惑

xiaobai2 · 发布于 2016年11月29日 · 最后由 xiaobai2 回复于 2016年12月01日 · 678 次阅读
96

最近项目里边用到es,Gemfile里边相关gem如下

gem 'elasticsearch'
gem 'elasticsearch-model'
gem 'elasticsearch-rails'
gem 'elasticsearch-persistence'
gem 'searchkick'

自己大概捋了一下

es-model: 主要和orm整合的(ActiveRecord 或者 MongoId)

es-rails: 集成了rails的各种功能

es-persistence: elasticsearch-persistence是为ruby对象提供了持久层。什么?! 持久层!rails不是有自己的持久层ActiveRecord吗?用了es-persistence之后会和ActiveRecord处于什么关系?难道是为了解决es和rails程序之间的持久关系吗?

searchkick:是不是在model层引入searchkick之后并且把model的数据reindex到es中就可以用如下语法检索es了

Model.search "wingtips", where: {color: "brandy"}

但是下边这段es检索代码又是用了哪个插件?(这是因为没用searchkick的原因吗?)

Model.__elasticsearch__.search(query)

它们的世界太乱,我已懵逼😮 我感觉以这种状态去看文档很吃力,所以哪位大牛出来救急一下,大概理一下它们之间的关系和作用

共收到 7 条回复
96

没人搭理哎

333

Searchkick 是将 Elasticsearch 集成到 Rails 的一个 gem, 大部分功能和你另外提到的那些 elasticsearch-xxxxx 差不多, 可能有一些差异, 但是要在 Rails 里用 Elasticsearch 的话一般选官方的 elasticsearch-xxxx 那几个或者单独只要一个 Searchkick 就可以了, 用不着都加到 Gemfile

一般而言,

gem 'elasticsearch-model'
gem 'elasticsearch-rails'

# - OR - 

gem 'searchkick'

elasticsearch-persistence 用的少, 看文档的说明像是用在一些 PORO 上, 而不是 ActiveRecord 的对象上

96

也就是说我想用es做搜索的话有你说的如上两个方案 但是如果用第一个方案的话类似Model.reindex一样把数据导入到es中,另外这两种方案是怎么做到rails层和es的数据同步的

11524

es-persistence: elasticsearch-persistence是为ruby对象提供了持久层。什么?! 持久层!rails不是有自己的持久层ActiveRecord吗?用了es-persistence之后会和ActiveRecord处于什么关系?难道是为了解决es和rails程序之间的持久关系吗?

其实你可以把elasticsearch看成一个自带全文检索的数据库。我们把需要检索的数据存到这个数据库里(比如你的文章,用户信息),这个数据库就可以帮我们建立各种索引,还提供给我们restful api检索我们存放进去的内容。

96

#4楼 @gyorou 大概知道了,怎么做到把需要的数据实时的保存到es里边

9500

其实,你可以看一下Ruby China的源代码,它就是用的Elasticsearch,看看它怎么用的Elasticsearch,在Model里做了什么,Gemfile里用了那几个gem就知道了。再看看官方的文档就知道了。

96

#6楼 @tesla_lee 好吧,老老实实去码代码咯😂

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册