使用InnoDB表进行全文搜索

时间:2010-09-22 20:45:46

标签: mysql jdbc full-text-search innodb

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

感谢

编辑:项目中的要求是拥有一致的数据库,我要执行搜索的表包含实验室中存在的工具列表,我正在构建Web应用程序,可以插入它的新工具,但让我们假设插入访问很少,并且主要是表将用于读访问,在这种情况下,使用MyIsam是合理的,它是否符合一致性要求(Myisam不支持事务) ?

1 个答案:

答案 0 :(得分:3)

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

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

这里的问题当然是保持MyISAM数据与InnoDB数据一致。您可以每隔一段时间运行一次作业,或者在有文本更新时让应用程序写入两个表。无论哪种方式,希望您可以在全文搜索中避免不一致,这对于“规范”表格数据来说是不可接受的。

当您想要的全文解决方案不可用时,另一种方法是回退到LIKE / RLIKE(正则表达式)匹配。将是无法索引的,所以不会很快,但至少它总能工作,对小型数据库来说也没问题。

编辑:

  

我要执行搜索的表格包含我正在为其构建Web应用程序的实验室中存在的工具列表

好的,那真的必须是FULLTEXT可搜索的吗?将这样的列表建模为每种类型设备的一个实体,以及实验室和设备之间的连接表(或者它是什么)不是更好吗?

  

所以如果同时发生2次插入?

MyISAM不会让两个INSERT声明相同的主键。但这并不足以保证一般情况下的“一致性”。虽然听起来你可以从实际的角度来看它,但如果明确要求“一致性”,这可能正是他们不希望你做的那样。