0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[035] ドキュメントの AND による絞り込み検索(「015」)の全件表示 by Ruby elasticsearch 7.14

Last updated at Posted at 2021-08-22
シリーズトップページ
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 を操作してみる ... 検証環境構築編

参考にした情報

URL
https://zenn.dev/kaiba/articles/e8d93e0397404186124c
https://stackoverflow.com/questions/64708844/how-to-scroll-data-using-scroll-api-elasticsearch
DevTool での scroll_id の使用方法
elasticsearch-api における scroll_id の指定方法
elasticsearch-api を使って scroll の情報を削除する
Qiita - 【Elasticsearch】ScrollAPIを使ってみた

 

実践

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?