如何通过多个参数实现搜索

时间:2017-08-29 09:45:58

标签: performance search data-structures

从请求中收到多个参数:
  - 域
  - GEO
  - 引用者   - 其他参数
数据库表看起来像这样:

domain   | geo    | referer | utm | option_id |
---------|--------|---------|-----|-----------|
test.com |        |         |     | 1  
test.com | us     |         |     | 2  
test.com | us     | ref.com | 12  | 3   
test2.com| us     |         |     | 4

例如,我收到了一些使用params的请求:

domain=test.com  
geo=us  
referer=ref.com  
utm=12 

如果我查询:

select option_id from table where domain='test.com' and geo='us' and referer='ref.com' and utm='12';

它只给我完整的匹配结果option_id = 3
但我需要获得所有选项,以及与域名和地理位置的每场比赛 option_id = [1,2,3]

如何以高效的方式解决问题,也许解决方案不是SQL数据库。我需要实时搜索highload系统。 帮助将非常有用,谢谢。

满足选择的查询将是:

select option_id from table where domain='test.com' and geo='' and referer='' and utm=''
UNION 
select option_id from table where domain='test.com' and geo='us' and referer='' and utm='' 
UNION 
select option_id from table where domain='test.com' and geo='us' and referer='ref.com' and utm='12'

但它很慢,我知道存在简单且高效的解决方案。也许没有SQL数据库

2 个答案:

答案 0 :(得分:0)

如果你想获得与至少一个参数匹配的所有选项,你应该使用OR代替AND

select option_id from table where ( domain='test.com' OR geo='us' OR referer='ref.com' OR utm='12' );

答案 1 :(得分:0)

select option_id from table where domain LIKE '%test.com%' and geo LIKE '%us%' and referer LIKE '%ref.com%' and utm like '%12%';

我没有测试此代码,但您必须使用like,它将使用模式搜索组件。