From mboxrd@z Thu Jan 1 00:00:00 1970 From: wmorgan-sup@masanjin.net (William Morgan) Date: Sun, 09 Dec 2007 11:44:43 -0800 Subject: [sup-talk] Too many clauses In-Reply-To: <20071203195238.GA1174@Nyx.cs.uiuc.edu> References: <20071203195238.GA1174@Nyx.cs.uiuc.edu> Message-ID: <1197229372-sup-8664@south> Excerpts from Dennis Griffith's message of Mon Dec 03 11:52:38 -0800 2007: > I started getting this crash upon start after updating to 0.3 from 0.1. > --- Ferret::StateError from thread: load threads for thread-index-mode > State Error occured at :93 in xraise > Error occured in q_boolean.c:1595 - bq_add_query_nr > Two many clauses. The max clause limit is set to <1024> but your query has <1024> clauses. You can try increasing :max_clause_count for the BooleanQuery or using a different type of query. > > /usr/lib/ruby/gems/1.8/gems/sup-0.3/lib/sup/index.rb:270:in `add_query' At first, I thought, "Great! An error message that contains its own solution!" But the max_clause_count thing seems to have disappeared in recent versions of Ferret. Can you try this patch, please? --- lib/sup/index.rb (revision 748) +++ lib/sup/index.rb (working copy) @@ -236,6 +236,7 @@ ## true, stops loading any thread if a message with a :killed flag ## is found. SAME_SUBJECT_DATE_LIMIT = 7 + MAX_CLAUSES = 1000 def each_message_in_thread_for m, opts={} #Redwood::log "Building thread for #{m.id}: #{m.subj}" messages = {} @@ -264,13 +265,16 @@ until pending.empty? || (opts[:limit] && messages.size >= opts[:limit]) q = Ferret::Search::BooleanQuery.new true + # this disappeared in newer ferrets... wtf. + # q.max_clause_count = 2048 - pending.each do |id| + lim = [MAX_CLAUSES / 2, pending.length].min + pending[0 ... lim].each do |id| searched[id] = true q.add_query Ferret::Search::TermQuery.new(:message_id, id), :should q.add_query Ferret::Search::TermQuery.new(:refs, id), :should end - pending = [] + pending = pending[lim .. -1] q = build_query :qobj => q Thanks, -- William