シリーズトップページ |
---|
https://qiita.com/robozushi10/items/2c8b6951ee342b013974 |
概要
Ruby の Elasticsearch Client を使って Elasticsearch 7.14 で REST API の操作する.
また、比較のために、Kibana DevTool でのクエリも合せて記しておく.
今回はインデックス「shakespeare」から次の「ドキュメントの検索」を行う.
・フィルード「text_entry」の値に「ACT」かつ「V」という "単語" を含むドキュメントを取り出す.
このとき、scroll_id を使って全件の取り出しを行う.
検証環境
下記の要領で検証用データ「Shakespeare」が登録された
・Elasticsearch + Kibana (7.14)
を使用した
[00] Ruby の elasticsearch client パッケージを使って Elasticsearch 7.14 を操作してみる ... 検証環境構築編
参考にした情報
実践
Kibana DevTool の場合
コード
下記を参照すること
・[015] ドキュメントの AND による絞り込み検索 by Ruby elasticsearch 7.14
Ruby の場合
コード
重要な部分は「if __FILE__ == $0 以降
」である.
class MySimpleClient は丸々コピーで良い. (が、192.168.10.115 のみ、適宜読み替えること)
#!/usr/bin/env ruby
# -*- encoding: utf-8 -*-
require 'multi_json'
require 'faraday'
require 'elasticsearch/api'
require 'active_support/core_ext'
require 'active_support'
class MySimpleClient
# note_0001
include Elasticsearch::API
CONNECTION = ::Faraday::Connection.new url: 'http://10.208.207.53:29200'
def perform_request(method, path, params, body, headers = nil)
CONNECTION.run_request \
method.downcase.to_sym,
path_with_params(path, params),
(body ? MultiJson.dump(body): nil),
{'Content-Type' => 'application/json'}
end
private
def path_with_params(path, params)
return path if params.blank?
case params
when String
"#{path}?#{params}"
when Hash
"#{path}?#{params.to_query}"
else
raise ArgumentError, "Cannot parse params: '#{params}'"
end
end
end
if __FILE__ == $0
client = MySimpleClient.new
q = {
"query": {
"query_string": {
"query": "text_entry:ACT AND text_entry:V"
}
}
}
res = client.search index: 'shakespeare', scroll: '10m', body: q
h = JSON.parse(res)
pp h
while h['hits']['hits'].size.positive?
q = {
"scroll_id": h['_scroll_id']
}
res = client.scroll scroll: '5m', body: q
h = JSON.parse(res)
pp h
end
end