Module: Elasticsearch::Rails2::Searching::ClassMethods

Defined in:
lib/elasticsearch/rails2/searching.rb

Instance Method Summary collapse

Instance Method Details

#scan_all_ids(query_or_payload, options = {}) ⇒ Object

Scan and scroll all ids Useful to do a SQL query with IN(…) operator



106
107
108
109
110
111
112
113
114
115
# File 'lib/elasticsearch/rails2/searching.rb', line 106

def scan_all_ids(query_or_payload, options={})
  ids = []
  scroll = options[:scroll]
  search_response = search(query_or_payload, options.update(search_type: 'scan'))
  response = search_response.response
  while response = client.scroll(scroll_id: response['_scroll_id'], scroll: scroll) and !response['hits']['hits'].empty? do
    response['hits']['hits'].each { |r| ids << r['_id']}
  end
  ids
end

#search(query_or_payload, options = {}) ⇒ Elasticsearch::Rails2::Response

Provides a ‘search` method for the model to easily search within an index/type corresponding to the model settings.

Examples:

Simple search in ‘Article`


Article.search 'foo'

Search using a search definition as a Hash


response = Article.search \
             query: {
               match: {
                 title: 'foo'
               }
             },
             highlight: {
               fields: {
                 title: {}
               }
             }

response.results.first.title
# => "Foo"

response.results.first.highlight.title
# => ["<em>Foo</em>"]

response.records.first.title
#  Article Load (0.2ms)  SELECT "articles".* FROM "articles" WHERE "articles"."id" IN (1, 3)
# => "Foo"

Search using a search definition as a JSON string


Article.search '{"query" : { "match_all" : {} }}'

Parameters:

  • query_or_payload (String, Hash, Object)

    The search request definition (string, JSON, Hash, or object responding to ‘to_hash`)

  • options (Hash) (defaults to: {})

    Optional parameters to be passed to the Elasticsearch client

Returns:



98
99
100
101
# File 'lib/elasticsearch/rails2/searching.rb', line 98

def search(query_or_payload, options={})
  search = SearchRequest.new(self, query_or_payload, options)
  Response::Response.new(self, search)
end