使用Docker在Rails和OpenSearch之间进行整合【环境设置】

首先

使用Docker Compose搭建Rails应用程序以使用OpenSearch的开发环境的构建步骤如下。

方針可以翻譯為 “policy” 或 “strategy”,取決於上下文。

基于以下两个理由,我们使用 gem elasticsearch-rails 来实现Rails和OpenSearch的联动。

    • rubyとopensearchを使ったクライアントは2022/12/11時点では公式に存在しない

 

    OpenSearch1系はElasticSearchの7.10をサポートしている

执行环境

Docker: 20.10.14
docker-compose: 1.29.2
ruby: 2.7.6
rails: 6.0.5
OpenSearch: 1.3.6

前提 (Qian2 ti2)

    • docker-composeでrailsが構築できていること

 

    • 検索として扱うModelが存在し、レコードを持っていること

今回は例としてBookModelを使用

構建開發環境

使用docker-compose来运行OpenSearch

在开发环境中,我们将以下内容添加到用于使用的docker-compose.yml文件中的services部分。

开放搜索

我们基于《为什么使用Docker的OpenSearch》的公式文档,但这次我们将在本地环境中进行操作,将discovery.type设置为single-node,并将DISABLE_INSTALL_DEMO_CONFIG和DISABLE_SECURITY_PLUGIN选项更改为true。

opensearch:
  image: opensearchproject/opensearch:1.3.6
  container_name: opensearch
  environment:
    - cluster.name=opensearch-cluster
    - node.name=opensearch-node1
    - discovery.type=single-node
    - bootstrap.memory_lock=true
    - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
    - "DISABLE_INSTALL_DEMO_CONFIG=true"
    - "DISABLE_SECURITY_PLUGIN=true"
  ulimits:
    memlock:
      soft: -1
      hard: -1
  volumes:
    - ./tmp/opensearch_data:/usr/share/opensearch/data
  ports:
    - 9200:9200
    - 9600:9600
  networks:
    - dev

开放搜索仪表板

在本文中,我们不使用仪表板,但是如果启用它,您可以通过浏览器进行索引创建、确认和文档搜索。

opensearch-dashboards:
  image: opensearchproject/opensearch-dashboards:1.3.6
  container_name: opensearch-dashboards
  environment:
    - 'OPENSEARCH_HOSTS=["http://opensearch:9200"]'
    - "DISABLE_SECURITY_DASHBOARDS_PLUGIN=true"
  ports:
    - 5601:5601
  links:
    - opensearch
  networks:
    - dev

Ruby on Rails的配置

我們將在現有的Rails設定中添加以下內容。

rails_app: 
  links:
    - opensearch
  networks:
    - dev

其他设置

定义网络,使容器之间能够通信。

networks:
  dev:

确认行动

在使用docker-compose up之后,从控制台中使用curl命令来确认响应。

curl http://localhost:9200 -ku 'admin:admin'
{
  "name" : "opensearch-node1",
  "cluster_name" : "opensearch-cluster",
  "cluster_uuid" : "xxxxxxxxxxxxxxxxx",
  ... <省略>
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}

使用elasticsearch-rails gem来使用OpenSearch。

安装Gem

为了保持与OpenSearch的兼容性,我们将安装Elastisearch相关的gem。而elasticsearch将被锁定在7.10版本。

gem 'elasticsearch-model', '7.1.1'
gem 'elasticsearch-rails', '7.1.1'
gem 'elasticsearch', '7.10.1'

进行config的设置

为了简洁表达,将值直接设置为host,user,password,但本来应该使用适当的方法如ENV进行设置。

Elasticsearch::Model.client = Elasticsearch::Client.new(
  host: 'http://opensearch:9200',
  user: 'admin',
  password: 'admin'
)

将elasticsearch-rails应用于Model

require 'elasticsearch/model'

class Book < ActiveRecord::Base
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks
end

创建一条用于(随意)确认的记录

Book.create title: 'コンサル一年目が学ぶこと'
Book.create title: '採用基準'
Book.create title: 'メタプログラミングRuby'

创建索引

Book.__elasticsearch__.create_index!

输入数据

Book.__elasticsearch__.import

请参考elasticsearch-model的README了解详细使用方法。

确认行动

请执行search方法,以任意文本作为参数,并确保返回了期望的记录。

Book.__elasticsearch__.search('メタ').records.first
=> #<Book:0x000055a737aa7218
 id: 3,
 title: 'メタプログラミングRuby',
... 省略

最后

在开发环境中,
我们能够在docker-compose上使Rails和OpenSearch配合使用。

在AWS环境中,根据配置的不同,只需切换config/initializers/elasticsearch.rb文件中的host,即可将其切换到”AWS OpenSearch”。

以下是一个中国人的本土化表达方式:

相关链接 or 参考链接

    • opensearch docs 1.3

 

    elasticsearch-rails
广告
将在 10 秒后关闭
bannerAds