summaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorJochen Topf <jochen@topf.org>2010-11-26 19:59:32 +0100
committerJochen Topf <jochen@topf.org>2010-11-26 19:59:32 +0100
commit6b32ed3b7c91027b0b3e0ec44286ce3d2d236cf5 (patch)
tree99e52b1f3c66dff5e613dccaac16287c08adced4 /web
parenta801d1f7ca841dcad23e99ff824d95fdf2540313 (diff)
downloadtaginfo-6b32ed3b7c91027b0b3e0ec44286ce3d2d236cf5.tar
taginfo-6b32ed3b7c91027b0b3e0ec44286ce3d2d236cf5.tar.gz
improved search
Diffstat (limited to 'web')
-rw-r--r--web/lib/api/search.rb23
-rw-r--r--web/lib/ui/search.rb6
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).