我想知道如何才能找到与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] 删除。
我来说两句