From bf6e02c7394a468ac4a385c179e2eb7c3769eb52 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Thu, 29 Nov 2007 18:33:42 +0000 Subject: [PATCH] Search engine: search can be restricted to an exact phrase by using quotation marks (eg. hello "bye bye" can be used to search for "hello" and "bye bye" strings). git-svn-id: http://redmine.rubyforge.org/svn/trunk@935 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/search_controller.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 7c50d4dc..ee4f863a 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -52,8 +52,11 @@ class SearchController < ApplicationController @object_types = @scope = %w(projects) end + # extract tokens from the question + # eg. hello "bye bye" => ["hello", "bye bye"] + @tokens = @question.scan(%r{((\s|^)"[\s\w]+"(\s|$)|\S+)}).collect {|m| m.first.gsub(%r{(^\s*"\s*|\s*"\s*$)}, '')} # tokens must be at least 3 character long - @tokens = @question.split.uniq.select {|w| w.length > 2 } + @tokens = @tokens.uniq.select {|w| w.length > 2 } if !@tokens.empty? # no more than 5 tokens to search for @@ -93,7 +96,6 @@ class SearchController < ApplicationController # if only one project is found, user is redirected to its overview redirect_to :controller => 'projects', :action => 'show', :id => @results.first and return if @results.size == 1 end - @question = @tokens.join(" ") else @question = "" end