1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# web/lib/api/search.rb
class Taginfo < Sinatra::Base
get '/api/2/search/keys' do
query = params[:q]
end
get '/api/2/search/values' do
query = params[:q]
total = @db.count('search.ftsearch').
condition_if("value MATCH ?", query).
get_first_value().to_i
res = @db.select('SELECT * FROM search.ftsearch').
condition_if("value MATCH ?", query).
order_by([:count_all], 'DESC').
paging(params[:rp], params[:page]).
execute()
return {
:page => params[:page].to_i,
:rp => params[:rp].to_i,
:total => total,
:data => res.map{ |row| {
:key => row['key'],
:value => row['value'],
:count_all => row['count_all'].to_i,
}}
}.to_json
end
get '/api/2/search/tags' do
query = params[:q]
query =~ /(.*)=(.*)/
query_key = $1
query_value = $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
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').
paging(params[:rp], params[:page]).
execute()
return {
:page => params[:page].to_i,
:rp => params[:rp].to_i,
:total => total,
:data => res.map{ |row| {
:key => row['key'],
:value => row['value'],
:count_all => row['count_all'].to_i,
}}
}.to_json
end
get '/api/2/search/wiki' do
query = params[:q]
end
end
|