2017-01-02 49 views
0

我有切身的参数(每人约100)的MySQL的数据表:MySQL数据库搜索与局部精确数学

{"id":"1", "height":"182", "hair_color":"red", "eyes_color":"haze", "day_of_birth":"25"} 

(JSON格式只是为了简单)

我必须能够实现部分搜索,以便能够通过例如5-1个参数来获得结果。

QUERY:["height":182, "hair_color":"red", "day_of_birth":"25", "skin_color":"black"]

最后,我需要匹配的参数

的NUMBER

像匹配的行名单:["id":"1","matched":"2"]

而得到的,说: “前100” 火柴的最大金额(确定,尽快:))

回答

1

如果你必须坚持一个sql数据库,请尝试类似以下内容:

select id, if (height=182,1,0) 
     + if(hair_color='red',1,0) 
     + if(day_of_birth=25,1,0) 
     + if(skin_color='black',1,0) as matched 
from person 
order by matched desc 
limit 100 

但是,对于大量参数与大量参数的匹配,可能有更好的选择,例如,使用全文索引,例如Apache Lucene/SOLR。

+0

嗯......从未尝试过这种态度。有趣。 100 if〜1000000 rows db ...可能相当耗时......但我会试试! –

+1

查看关于Lucence的评论... –

+1

您一定要寻找其他一些存储引擎。如果保持MySQL是必须的,那么看看Lucene(或弹性搜索)。如果有一个关系数据库是必须的,但你恰巧考虑MySQL的替代方案,那么你可能会在PostgreSQL上取得成功,PostgreSQL为索引提供了对各种模糊匹配和多维查询的支持。我并不确定,但MariaDB在这方面也可能有一些有趣的功能。 – jwatkins