From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by 10.90.87.14 with SMTP id k14cs1382369agb; Fri, 1 Jan 2010 20:37:34 -0800 (PST) Received: by 10.224.63.202 with SMTP id c10mr10062689qai.39.1262407053792; Fri, 01 Jan 2010 20:37:33 -0800 (PST) Return-Path: Received: from rubyforge.org (rubyforge.org [205.234.109.19]) by mx.google.com with ESMTP id 36si9379186qyk.126.2010.01.01.20.37.33; Fri, 01 Jan 2010 20:37:33 -0800 (PST) Received-SPF: pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) client-ip=205.234.109.19; Authentication-Results: mx.google.com; spf=pass (google.com: domain of sup-devel-bounces@rubyforge.org designates 205.234.109.19 as permitted sender) smtp.mail=sup-devel-bounces@rubyforge.org Received: from rubyforge.org (rubyforge.org [127.0.0.1]) by rubyforge.org (Postfix) with ESMTP id 83D221D78874; Fri, 1 Jan 2010 23:37:33 -0500 (EST) Received: from magnesium.club.cc.cmu.edu (MAGNESIUM.CLUB.CC.cmu.edu [128.237.157.15]) by rubyforge.org (Postfix) with ESMTP id CABF318582BF for ; Fri, 1 Jan 2010 23:37:31 -0500 (EST) Received: (qmail 11304 invoked from network); 2 Jan 2010 04:37:31 -0000 Received: from pion.club.cc.cmu.edu (HELO localhost.localdomain) (128.237.157.88) by magnesium.club.cc.cmu.edu with SMTP; 2 Jan 2010 04:37:31 -0000 From: Rich Lane To: sup-devel@rubyforge.org Date: Fri, 1 Jan 2010 20:37:26 -0800 Message-Id: <1262407046-2029-1-git-send-email-rlane@club.cc.cmu.edu> X-Mailer: git-send-email 1.6.3.3 Subject: [sup-devel] [PATCH] xapian: translate from/to query term prefixes to search over both name and email fields X-BeenThere: sup-devel@rubyforge.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: Sup developer discussion List-Id: Sup developer discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sup-devel-bounces@rubyforge.org Errors-To: sup-devel-bounces@rubyforge.org --- lib/sup/xapian_index.rb | 19 ++++++++++++------- 1 files changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/sup/xapian_index.rb b/lib/sup/xapian_index.rb index cebb148..c192b26 100644 --- a/lib/sup/xapian_index.rb +++ b/lib/sup/xapian_index.rb @@ -159,14 +159,15 @@ EOS subs = HookManager.run("custom-search", :subs => s) || s subs = subs.gsub(/\b(to|from):(\S+)\b/) do - field, name = $1, $2 - if(p = ContactManager.contact_for(name)) - [field, p.email] - elsif name == "me" - [field, "(" + AccountManager.user_emails.join("||") + ")"] + field, value = $1, $2 + email_field, name_field = %w(email name).map { |x| "#{field}_#{x}" } + if(p = ContactManager.contact_for(value)) + "#{email_field}:#{p.email}" + elsif value == "me" + '(' + AccountManager.user_emails.map { |e| "#{email_field}:#{e}" }.join(' OR ') + ')' else - [field, name] - end.join(":") + "(#{email_field}:#{value} OR #{name_field}:#{value})" + end end ## if we see a label:deleted or a label:spam term anywhere in the query @@ -250,6 +251,8 @@ EOS end end + debug "translated query: #{subs.inspect}" + qp = Xapian::QueryParser.new qp.database = @xapian qp.stemmer = Xapian::Stem.new(STEM_LANGUAGE) @@ -260,6 +263,8 @@ EOS BOOLEAN_PREFIX.each { |k,v| qp.add_boolean_prefix k, v } xapian_query = qp.parse_query(subs, Xapian::QueryParser::FLAG_PHRASE|Xapian::QueryParser::FLAG_BOOLEAN|Xapian::QueryParser::FLAG_LOVEHATE|Xapian::QueryParser::FLAG_WILDCARD, PREFIX['body']) + debug "parsed xapian query: #{xapian_query.description}" + raise ParseError if xapian_query.nil? or xapian_query.empty? query[:qobj] = xapian_query query[:text] = s -- 1.6.3.3 _______________________________________________ Sup-devel mailing list Sup-devel@rubyforge.org http://rubyforge.org/mailman/listinfo/sup-devel