新手问题 求一份 es 的使用教程

daimeng · 2024年06月11日 · 最后由 KAITHY 回复于 2024年06月29日 · 583 次阅读

一直不会使用 es 也查了一些相关资料,感觉资料不是很好也没坚持学下来,所以没能去门,有没有大佬有好的资料分享一下

问题:如何在 rails 中使用 es?比如在项目中创建了一个 products 表,然后 products 的 crud 都能同步 es

帮你问了下 GPT

在 Rails 中使用 Elasticsearch (ES) 进行数据同步和搜索是一个常见的需求。以下是一个基本的指导,展示如何在一个 Rails 项目中集成 Elasticsearch,确保 products 表的 CRUD 操作能够同步更新到 Elasticsearch。

1. 安装必要的 gems

首先,确保你的 Rails 项目中安装了 elasticsearch-modelelasticsearch-rails gems。这可以通过在你的 Gemfile 中添加以下行来完成:

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

然后运行 bundle install 来安装这些 gems。

2. 配置 Elasticsearch

config 文件夹中创建一个新文件 elasticsearch.yml,并配置你的 Elasticsearch 服务器的连接信息:

development:
  host: 'localhost'
  port: 9200
production:
  host: 'your-production-host'
  port: 9200

config/initializers 目录下创建一个名为 elasticsearch.rb 的文件,用于读取配置并初始化连接:

config = YAML.load_file(Rails.root.join('config', 'elasticsearch.yml'))[Rails.env]
Elasticsearch::Model.client = Elasticsearch::Client.new(host: config['host'], port: config['port'])

3. 集成 Elasticsearch 到模型

在你的 Product 模型中,包含 Elasticsearch::Model 模块并设置索引:

class Product < ApplicationRecord
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks

  # 如果需要自定义索引名
  index_name "products-#{Rails.env}"

  # 自定义索引数据
  def as_indexed_json(options = {})
    as_json(only: [:name, :description, :price])
  end
end

这里的 Elasticsearch::Model::Callbacks 确保了当你创建、更新或删除 Product 记录时,相关的 Elasticsearch 索引会自动更新。

4. 创建和管理索引

你可能需要一个 Rake 任务来管理 Elasticsearch 索引,如创建和删除索引:

namespace :es do
  desc "Create Elasticsearch index"
  task create_index: :environment do
    Product.__elasticsearch__.create_index!(force: true)
  end

  desc "Delete Elasticsearch index"
  task delete_index: :environment do
    Product.__elasticsearch__.delete_index!
  end
end

5. 使用 Elasticsearch 进行搜索

在你的 ProductsController 或其他适当的地方,添加搜索逻辑:

def search
  @products = Product.search(params[:query]).records
end

这段代码会基于用户输入的 query 参数在 Elasticsearch 中搜索 Product

6. 启动和测试

在你的本地机器或服务器上启动 Elasticsearch 服务,然后运行上述的 Rake 任务来创建索引。确保你的 Rails 应用能够正确地与 Elasticsearch 通信并同步数据。

这些步骤为在 Rails 中使用 Elasticsearch 提供了一个基本框架。你可以根据实际需求调整索引结构、搜索查询和同步策略。

用 searchkick 方便很多

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