数据库
首页 > 数据库> > mysql-使用InnoDB表进行全文搜索

mysql-使用InnoDB表进行全文搜索

作者:互联网

我需要使用全文搜索,但是我在Web应用程序中使用的表使用了INNODB引擎,从我读到的JDBC来看,它不支持Mysql触发器,因此我应该将项目部署在课程服务器上,因此安装工具例如狮身人面像是不可能的,有人可以建议一种执行全文本搜索的方法吗?

谢谢

编辑:项目中的要求是要有一个一致的数据库,我要在其上进行搜索的表包含要为其构建Web应用程序的实验室中存在的仪器的列表,可以向其中插入新仪器它,但是我们假设插入访问很少,并且大多数情况下该表将用于读取访问,在这种情况下,使用MyIsam是合理的,并且符合一致性要求(Myisam不支持事务)吗?

解决方法:

您可以使用MyISAM创建第二个表,该表仅包含主表的主键以及希望进行FULLTEXT搜索的文本内容.然后,当您要进行全文搜索时,可以在正确的InnoDB表和搜索诱饵MyISAM表之间进行JOIN,并针对MyISAM表进行MATCH条件.

这还允许您将MyISAM表中的不同搜索诱饵文本存储为InnoDB表中的“真实”文本,从而允许您实现MySQL的FULLTEXT引擎无法管理的诸如词干或特殊撇号/连字符处理之类的功能.

当然,这里的问题是使MyISAM数据与InnoDB数据保持一致.您可以经常运行一项作业来执行此操作,也可以在有文本更新时使应用程序同时写入两个表.无论哪种方式,都希望您能摆脱全文搜索中的不一致,对于“规范”表数据来说,这种不一致是不可接受的.

另一种方法是在所需的全文解决方案不可用时退回到LIKE / RLIKE(regexp)匹配.将无法索引,因此速度不快,但至少它将始终有效,并且对于较小的数据库也很好.

编辑:

the table on which I want to perform search contains the list of instruments that exist in the lab for which I am building the web application

好吧,那真的必须是全文搜索吗?将这样的列表建模为每种设备类型一个实体,并在实验室和设备(或任何类型的设备)之间建立联接表,会更好吗?

so if 2 inserts happen at the same time?

MyISAM不会让两个INSERT声明相同的主键.但这还不足以保证一般情况下的“一致性”.听起来您可以从实际的角度出发,但是如果明确要求“一致性”,那可能正是他们不希望您这样做的原因.

标签:jdbc,innodb,full-text-search,mysql
来源: https://codeday.me/bug/20191209/2096519.html