MySQL Full Text" Exact Phrase"当没有匹配时,实际上没有相关性的错误命中

时间:2017-01-24 01:24:55

标签: mysql full-text-search

PHP Version 5.8.8

我正试图创建一个不敏感的案例"完全匹配"查询仅返回完全匹配结果,没有相关性剩余部分,如下面的查询2和3中的结果。

直接切入追逐,查询6正常工作!!

我创建了一个包含一些测试数据的表:

Tablename = test_boolean_mode,列名=全文(utf8_bin)

123 The Black Cat 456
The Black Cat
98 The Black Cat
The Black Cat 76
543 the 456
black cat
hgs cat
gres black jgfx
black 99

查询1(区分大小写):

SELECT *
FROM `test_boolean_mode`
WHERE (MATCH `fulltext` AGAINST ('The Black Cat' IN BOOLEAN MODE))

返回:

123 The Black Cat 456
The Black Cat
98 The Black Cat
The Black Cat 76

查询2(结果是我称之为剩菜或假命中):

SELECT *
FROM `test_boolean_mode`
WHERE (MATCH `fulltext` AGAINST ('The black cat' IN BOOLEAN MODE))

返回:

black cat
gres black jgfx
black 99

查询3(结果是我称之为剩余或虚假命中)

SELECT *
FROM `test_boolean_mode`
WHERE (MATCH `fulltext` AGAINST ('the black cat' IN BOOLEAN MODE))

返回:

black cat
gres black jgfx
black 99

以下是使用LIKE运算符进行的测试

查询4(不返回任何比二进制模式更好的内容,但仍区分大小写):

SELECT *
FROM `test_boolean_mode`
WHERE (`fulltext`  LIKE '%the black cat%')

不返回任何内容

查询5(这是正确的,但仍区分大小写):

SELECT * 
FROM `test_boolean_mode`
WHERE (`fulltext`  LIKE '%The Black Cat%')

返回:

123 The Black Cat 456
The Black Cat
98 The Black Cat
The Black Cat 76

查询6(这是正确且完美的,如果不匹配则返回nothinng并且不区分大小写!!!):

SELECT *
FROM `test_boolean_mode`
WHERE (`fulltext` COLLATE UTF8_GENERAL_CI LIKE '%the black cat%')

返回:

123 The Black Cat 456
The Black Cat
98 The Black Cat
The Black Cat 76

1 个答案:

答案 0 :(得分:0)

我打算将此信息发布为信息而不是问题,但找不到合适的地方。由于我花了很多时间搞清楚这一点,我认为对那里的人有用并且无法在任何地方找到答案。