【发布时间】:2022-11-17 01:44:04
【问题描述】:
实施简单的全文搜索我遇到了组合的问题布尔模式和短语.另外值得注意的是,该列有一个二进制排序规则 (utf8_bin) 而表中没有这个。
给定以下设置:
CREATE TABLE `test` (
`test_id` int(11) NOT NULL AUTO_INCREMENT,
`text_bin` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`test_id`),
FULLTEXT KEY `text_bin` (`text_bin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test` (`test_id`, `text_bin`) VALUES
(1, 'Lorem Ipsum Dolor Sit Amet.'),
(2, 'Consectetuer Adipiscing Elit.'),
(3, 'Amet Sit Dolor Ipsum Lorem.')
;
然后运行此查询:
SELECT t.test_id, t.text_bin,
MATCH(t.text_bin) AGAINST ('Lorem Ipsum' IN BOOLEAN MODE) as m_Words,
MATCH(t.text_bin) AGAINST ('"Lorem Ipsum"' IN BOOLEAN MODE) as m_Phrase,
MATCH(t.text_bin) AGAINST ('Lorem' IN BOOLEAN MODE) as m_Lorem,
MATCH(t.text_bin) AGAINST ('Ipsum' IN BOOLEAN MODE) as m_Ipsum
FROM test t
;
这会产生以下结果:
| test_id | text_bin | m_Words | m_Phrase | m_Lorem | m_Ipsum |
|---|---|---|---|---|---|
| 1 | Lorem Ipsum Dolor Sit Amet. | 0.0620 | 0 | 0.0310 | 0.0310 |
| 2 | Consectetuer Adipiscing Elit. | 0 | 0 | 0 | 0 |
| 3 | Amet Sit Dolor Ipsum Lorem. | 0.0620 | 0 | 0.0310 | 0.0310 |
(注意:为了更好的可读性,我将数字缩短为小数点后 4 位。)
对于 m_Phrase 列,我希望第一行的值大于 0。这是一个错误还是有人可以解释为什么结果为 0?
【问题讨论】:
-
是的,我肯定会期望那里的价值> 0。事实上,这应该是最高值,因为该短语出现在 3 行中的 1 行中,而不是 3 行中的 2 行。
标签: mysql full-text-search phrase