V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
12tall
V2EX  ›  程序员

[SQL] 请问这种字段超多的数据表应该怎么检索全部字段

  •  
  •   12tall · 2020-12-10 10:00:05 +08:00 · 1958 次点击
    这是一个创建于 1443 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟对数据库仅用过简单的增删改查。昨天同事提了个想法,有点懵逼。求各位大佬指点迷津🙏

    需求:

    1. 数据表中的字段比较多,大概有 70 多个,主要用于存放一些实验数据(不只是数值);
    2. 用户想使用自然语言(英文) 在所有字段中检索;
    3. 数据表可能会经常增加字段;
    4. 字段太多,在 Web 端显示不开

    思路与疑惑

    1. 在全部字段中进行模糊查询?
      • 英文可以利用空格来分词;
      • 百度得知可以使用MySQLCONCAT() 函数来拼接字段;
      • where 后面的检索条件应该通过遍历用户输入来拼接,所以需要限制用户输入长度;
      • 需不需要用到视图,数据表更新后还需要手动更新视图?
    2. 怎么对查询结果进行相关性的排序?
      • 目前能想到的就只有利用case...when... 计数。
    3. Web 端显示
      • 目前利用vue + element 可以实现用户自定义显示 /隐藏列。

    烦请各位大佬给点意见,或者可以参考(白嫖)的项目,谢谢!🙏

    14 条回复    2020-12-11 09:27:54 +08:00
    l00t
        1
    l00t  
       2020-12-10 10:09:52 +08:00   ❤️ 1
    不知道你在说什么…… 你这列的“需求”,完全不清晰。像“4.", 这甚至不是需求。

    使用自然语言在所有字段中检索?这是个怎样的场景?

    “相关性排序”又是个什么东西?
    ztxcccc
        2
    ztxcccc  
       2020-12-10 10:13:58 +08:00   ❤️ 1
    上搜索引擎,Apache Solr
    l00t
        3
    l00t  
       2020-12-10 10:14:02 +08:00   ❤️ 1
    不考虑那些不清楚的内容,单说字段可能经常增加这点,使用传统关系型数据库的话,一般可以用纵表形式。字段是一条记录,而不是真的表字段。而建的表可以是 ID, 字段名,字段值 这样的形式。

    不过如果综合你别的需求来考虑的话,那整个模型就未必合适。
    12tall
        4
    12tall  
    OP
       2020-12-10 10:21:33 +08:00
    @l00t 非常感谢
    `4.` 的话是做网页的时候遇到的一个比较头疼的问题,跟 SQL 无关

    我理解的检索是:用户输入一组关键词,去匹配数据表中的所有字段,返回包含全部或几个关键词的记录行
    如果某一行包含所有用户输入的关键词,那么它就要被优先显示
    12tall
        5
    12tall  
    OP
       2020-12-10 10:24:04 +08:00
    @ztxcccc 谢谢,去百度一下
    l00t
        6
    l00t  
       2020-12-10 10:28:04 +08:00   ❤️ 1
    @12tall #4 这种检索方式就不要用 mysql 了,用 elastic search 之类的吧。
    12tall
        7
    12tall  
    OP
       2020-12-10 10:31:13 +08:00
    @l00t 哇,非常感谢大佬的推荐。谢谢!
    dfzj
        8
    dfzj  
       2020-12-10 15:02:17 +08:00   ❤️ 1
    给这个结构化数据库对应建立一张资源索引表:
    CEATE TABLE table1 (id
    , content TEXT -- 把所有字段内容放入该字段中
    , srcId -- 源表 ID)

    然后界面上用户输入 关键词,去查出 table1.conent, 得到 srcId, 最终找到目标
    12tall
        9
    12tall  
    OP
       2020-12-10 15:25:59 +08:00
    @dfzj 谢谢,请问这个和视图、或者传说中的倒排索引是不是很像呢
    dfzj
        10
    dfzj  
       2020-12-10 15:32:21 +08:00
    @12tall 有点那种意思,但还差的远。倒排索引还得把所有字段内容先做分词,然后按照词来排
    imn1
        11
    imn1  
       2020-12-10 15:46:16 +08:00   ❤️ 1
    2. google "SQL 全文检索"
    3. 考虑 NOSQL,或者 sql+json
    whx20202
        12
    whx20202  
       2020-12-10 16:01:13 +08:00   ❤️ 1
    1. 用一个同步工具(订阅 binlog 那种)同步到 elastic search 里。
    2. 用 es 查询
    shuax
        13
    shuax  
       2020-12-10 16:43:46 +08:00   ❤️ 1
    改用 es
    wakzz
        14
    wakzz  
       2020-12-11 09:27:54 +08:00   ❤️ 1
    你这个需求不建议使用 mysql,建议将 mysql 的数据实时同步到 es 后,通过 es 来查询
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5269 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 03:41 · PVG 11:41 · LAX 19:41 · JFK 22:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.