CONTAINS(甲骨文)vs.MATCH(MySql)

用户名

我想知道如何才能找到与MySql DBMS中的Oracle相同的结果。

例如,我在Oracle中使用以下语句:

Select *
FROM   PEP INNER JOIN ZUSAMMEN ON PEP.ID = ZUSAMMEN.PEPID
WHERE CONCATINS(ZUSAMMEN.NAMEN, '%Angela% and %Merkel%',0 ) > 0;

因此,我在“名称”列上设置了上下文索引。

现在,在MySql中,语法如下所示:

SELECT *
FROM   INNER JOIN ZUSAMMEN ON PEP.ID = ZUSAMMEN.PEPID
WHERE  MATCH(ZUSAMMEN.NAMEN) AGAINST ('Angela Merkel' IN BOOLEAN MODE);

问题是,MySql语句比Oracle查找更多的结果。Oracle查找确切的名称(Angela Dorothea Merkel)。MySql没有。

如何为MySql构建我的语法,使MySql找到与Oracle相同的结果?

阴影

根据mysql文档的布尔模式全文搜索

在实现此功能时,MySQL使用了有时称为隐式布尔逻辑的方法,其中

  • +:代表AND

  • -:代表NOT

  • [无运算符]:暗含或

您尚未指示任何运算符,因此mysql正在搜索namen字段中存在Angela或Merkel的记录使用+运算符修改搜索以要求同时出现两个单词:

MATCH(ZUSAMMEN.NAMEN) AGAINST ('+Angela +Merkel' IN BOOLEAN MODE)

请注意,mysql搜索的行为仍会略有不同。Oracle搜索应返回名称为Angelas Merkels的记录,而mysql搜索则不会。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章