【问题标题】:MySQL DB search with partial exact math具有部分精确数学的 MySQL DB 搜索
【发布时间】:2017-01-02 21:10:51
【问题描述】:

我有个人参数的MySQL数据表(每人约100个):

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

(JSON格式只是为了简单)

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

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

最后我需要匹配行的列表,其中包含 NUMBER 个匹配参数

点赞:["id":"1","matched":"2"]

然后得到,说“前 100 个”匹配数量最多的(当然,尽快 :))

【问题讨论】:

    标签: mysql search fuzzy-search


    【解决方案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。

    【讨论】:

    • 嗯...从来没有尝试过这种态度。有趣的。 100 if's over ~1000000 rows db...可能相当耗时...但我会尝试!
    • 您绝对应该寻找其他存储引擎。如果必须保留 MySQL,请查看 Lucene(或 Elastic Search)。如果有一个关系数据库是必须的,但你碰巧在考虑 MySQL 的替代品,那么你可能会在 PostgreSQL 上取得成功,它提供对各种模糊匹配和多维查询的支持,并带有索引。我不确定,但 MariaDB 在这方面可能也有一些有趣的特性。
    • @StephanLechner,这个项目很小,所以很可能,这个解决方案可以解决问题。但后来,如果它带来任何利润,SOLR /Lucene 就在眼前。
    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多