def explain(value = nil)
      chain { criteria.update_request_options explain: (value.nil? ? true : value) }
    end
def explain(value = nil)
      chain { criteria.update_request_options explain: (value.nil? ? true : value) }
    end
Comparation with other query or collection
 If other is collection - search request is executed and
 result is used for comparation

 @example
   UsersIndex.filter(term: {name: 'Johny'}) == UsersIndex.filter(term: {name: 'Johny'}) # => true
   UsersIndex.filter(term: {name: 'Johny'}) == UsersIndex.filter(term: {name: 'Johny'}).to_a # => true
   UsersIndex.filter(term: {name: 'Johny'}) == UsersIndex.filter(term: {name: 'Winnie'}) # => false

 Adds `explain` parameter to search request.

 @example
   UsersIndex.filter(term: {name: 'Johny'}).explain
   UsersIndex.filter(term: {name: 'Johny'}).explain(true)
   UsersIndex.filter(term: {name: 'Johny'}).explain(false)

 Calling explain without any arguments sets explanation flag to true.
 With `explain: true`, every result object has `_explanation`
 method

 @example
   UsersIndex::User.filter(term: {name: 'Johny'}).explain.first._explanation # => {...}