diff -uNr roundup-1.3.1/roundup/cgi/actions.py roundup-1.3.1.indexer_rdbms/roundup/cgi/actions.py --- roundup-1.3.1/roundup/cgi/actions.py 2006-08-11 07:40:11.000000000 +0200 +++ roundup-1.3.1.indexer_rdbms/roundup/cgi/actions.py 2008-01-11 15:21:57.919787153 +0100 @@ -966,7 +966,7 @@ # full-text search if request.search_text: matches = self.db.indexer.search( - re.findall(r'\b\w{2,25}\b', request.search_text), klass) + re.findall(r'[\w_%]{2,25}', request.search_text), klass) else: matches = None diff -uNr roundup-1.3.1/roundup/cgi/templating.py roundup-1.3.1.indexer_rdbms/roundup/cgi/templating.py --- roundup-1.3.1/roundup/cgi/templating.py 2006-11-09 06:53:40.000000000 +0100 +++ roundup-1.3.1.indexer_rdbms/roundup/cgi/templating.py 2008-01-11 15:34:58.602355808 +0100 @@ -2454,7 +2454,7 @@ if self.search_text: matches = self.client.db.indexer.search( [w.upper().encode("utf-8", "replace") for w in re.findall( - r'(?u)\b\w{2,25}\b', + r'(?u)[\w_%]{2,25}', unicode(self.search_text, "utf-8", "replace") )], klass) else: diff -uNr roundup-1.3.1/roundup/backends/indexer_rdbms.py roundup-1.3.1.indexer_rdbms/roundup/ckends/indexer_rdbms.py --- roundup-1.3.1/roundup/backends/indexer_rdbms.py 2006-10-04 02:35:16.000000000 +0200 +++ roundup-1.3.1.indexer_rdbms/roundup/backends/indexer_rdbms.py 2008-01-15 20:39:52.365118481 +0100 @@ -86,7 +86,11 @@ if self.db.implements_intersect: # simple AND search - sql = 'select distinct(_textid) from __words where _word=%s'%self.db.arg + if word.find('_') == -1 and word.find('%') == -1: + sql = 'select distinct(_textid) from __words where _word=%s'%self.db.arg + else: + sql = 'select distinct(_textid) from __words where _word LIKE %s'%self.db.arg + sql = '\nINTERSECT\n'.join([sql]*len(l)) self.db.cursor.execute(sql, tuple(l)) r = self.db.cursor.fetchall()