diff options
author | Jochen Topf <jochen@topf.org> | 2010-11-26 19:59:32 +0100 |
---|---|---|
committer | Jochen Topf <jochen@topf.org> | 2010-11-26 19:59:32 +0100 |
commit | 6b32ed3b7c91027b0b3e0ec44286ce3d2d236cf5 (patch) | |
tree | 99e52b1f3c66dff5e613dccaac16287c08adced4 | |
parent | a801d1f7ca841dcad23e99ff824d95fdf2540313 (diff) | |
download | taginfo-6b32ed3b7c91027b0b3e0ec44286ce3d2d236cf5.tar taginfo-6b32ed3b7c91027b0b3e0ec44286ce3d2d236cf5.tar.gz |
improved search
-rw-r--r-- | web/lib/api/search.rb | 23 | ||||
-rw-r--r-- | web/lib/ui/search.rb | 6 |
2 files changed, 20 insertions, 9 deletions
diff --git a/web/lib/api/search.rb b/web/lib/api/search.rb index 6203d1f..9732e7e 100644 --- a/web/lib/api/search.rb +++ b/web/lib/api/search.rb @@ -36,14 +36,25 @@ class Taginfo < Sinatra::Base get '/api/2/search/tags' do query = params[:q] - query =~ /(.*)=(.*)/ - query_key = $1 - query_value = $2 + (query_key, query_value) = query.split('=', 2) - total = @db.execute('SELECT count(*) FROM (SELECT * FROM search.ftsearch WHERE key MATCH ? INTERSECT SELECT * FROM search.ftsearch WHERE value MATCH ?)', query_key, query_value)[0][0].to_i + if query_key == '' + total = @db.execute('SELECT count(*) FROM search.ftsearch WHERE value MATCH ?', query_value)[0][0].to_i + sel = @db.select('SELECT * FROM search.ftsearch WHERE value MATCH ?', query_value) + elsif query_value == '' + total = @db.execute('SELECT count(*) FROM search.ftsearch WHERE key MATCH ?', query_key)[0][0].to_i + sel = @db.select('SELECT * FROM search.ftsearch WHERE key MATCH ?', query_key) + else + total = @db.execute('SELECT count(*) FROM (SELECT * FROM search.ftsearch WHERE key MATCH ? INTERSECT SELECT * FROM search.ftsearch WHERE value MATCH ?)', query_key, query_value)[0][0].to_i + sel = @db.select('SELECT * FROM search.ftsearch WHERE key MATCH ? INTERSECT SELECT * FROM search.ftsearch WHERE value MATCH ?', query_key, query_value) + end - res = @db.select('SELECT * FROM search.ftsearch WHERE key MATCH ? INTERSECT SELECT * FROM search.ftsearch WHERE value MATCH ?', query_key, query_value). - order_by([:count_all], 'DESC'). + res = sel. + order_by(params[:sortname], params[:sortorder]) { |o| + o.count_all + o.key + o.value + }. paging(params[:rp], params[:page]). execute() diff --git a/web/lib/ui/search.rb b/web/lib/ui/search.rb index 8592d3f..bc96445 100644 --- a/web/lib/ui/search.rb +++ b/web/lib/ui/search.rb @@ -47,15 +47,15 @@ END_XML res = sel. condition_if("value LIKE ? || '%'", value). execute(). - map{ |row| row['key'] + '=' + row['value'] } - elsif query =~ /(.*)=(.*)/ + map{ |row| row['key'] + '=' + row['value'].to_s } + elsif query =~ /^([^=]+)=(.*)/ key = $1 value = $2 res = sel. condition_if("key LIKE ? || '%'", key). condition_if("value LIKE ? || '%'", value). execute(). - map{ |row| row['key'] + '=' + row['value'] } + map{ |row| row['key'] + '=' + row['value'].to_s } else res = sel. condition_if("key LIKE ? || '%'", query). |