Class: Droonga::Searcher::QuerySearcher
- Inherits:
-
Object
- Object
- Droonga::Searcher::QuerySearcher
- Includes:
- Loggable
- Defined in:
- lib/droonga/searcher.rb,
lib/droonga/searcher/mecab_filter.rb
Defined Under Namespace
Classes: MeCabTokenizer
Constant Summary collapse
- OPERATOR_CONVERSION_TABLE =
{ "||" => Groonga::Operator::OR, "&&" => Groonga::Operator::AND, "-" => Groonga::Operator::AND_NOT, }
Class Method Summary collapse
Instance Method Summary collapse
- #apply_condition!(condition) ⇒ Object
- #apply_mecab_filter(condition) ⇒ Object
-
#initialize(search_request) ⇒ QuerySearcher
constructor
A new instance of QuerySearcher.
- #original_apply_condition! ⇒ Object
- #search ⇒ Object
Constructor Details
#initialize(search_request) ⇒ QuerySearcher
Returns a new instance of QuerySearcher.
231 232 233 234 |
# File 'lib/droonga/searcher.rb', line 231 def initialize(search_request) @result = SearchResult.new @request = search_request end |
Class Method Details
.search(search_request) ⇒ Object
226 227 228 |
# File 'lib/droonga/searcher.rb', line 226 def search(search_request) new(search_request).search end |
Instance Method Details
#apply_condition!(condition) ⇒ Object
370 371 372 373 374 375 376 377 378 379 |
# File 'lib/droonga/searcher.rb', line 370 def apply_condition!(condition) expression = Groonga::Expression.new(context: @request.context) expression.define_variable(:domain => @records) parse_condition(@records, expression, condition) logger.trace("search_query: select: start", :condition => condition) @records = @records.select(expression) logger.trace("search_query: select: done") @result.condition = expression end |
#apply_mecab_filter(condition) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/droonga/searcher/mecab_filter.rb', line 36 def apply_mecab_filter(condition) return unless condition.is_a?(Hash) return unless condition["useMeCabFilter"] query = condition["query"] return if query.nil? match_columns = condition["matchTo"] return unless match_columns.is_a?(Array) return if match_columns.size != 1 match_column = match_columns.first tokenizer = MeCabTokenizer.new @records.open_cursor do |cursor| count = 0 cursor.each do |record| match_target = record[match_column] body_terms = tokenizer.tokenize(match_target) unless body_terms.include?(query) record.delete end end end end |
#original_apply_condition! ⇒ Object
60 61 62 63 64 65 66 67 68 69 |
# File 'lib/droonga/searcher/mecab_filter.rb', line 60 def apply_condition!(condition) expression = Groonga::Expression.new(context: @request.context) expression.define_variable(:domain => @records) parse_condition(@records, expression, condition) logger.trace("search_query: select: start", :condition => condition) @records = @records.select(expression) logger.trace("search_query: select: done") @result.condition = expression end |
#search ⇒ Object
236 237 238 239 |
# File 'lib/droonga/searcher.rb', line 236 def search search_query! @result end |