MySQL布尔匹配短语不起作用

时间:2018-03-29 12:27:14

标签: mysql full-text-search

我使用全文布尔匹配https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

作品

匹配bear,跳过其余部分:

+bear

作品

匹配bearteddy,跳过其余部分:

+(bear teddy)

不起作用

对我来说,预期的行为是bearteddyme and my,跳过其余部分。它不起作用,因为我没有得到结果。

+(bear teddy '"me and my"')

如何获得预期结果?

1 个答案:

答案 0 :(得分:3)

我认为您错误地解释了文档。 me and my只需要用双引号括起来,而不是像你所做的那样用单引号和双引号括起来。所以你的查询看起来应该像

SELECT * FROM table WHERE MATCH(column) AGAINST('+(bear teddy "me and my")' IN BOOLEAN MODE)

考虑这个例子:

CREATE TABLE table1 (txt VARCHAR(512));
INSERT INTO table1 VALUES('here is a bear'), ('this is a teddy'),
('nothing to see here'), ('only me'), ('me and someone else'), ('oh my'),
('me and my children'), ('a teddy bear'), ('me and my teddy bear'),
('love me'), ('what about me and my life');
ALTER TABLE table1 ADD FULLTEXT idx(txt);
SELECT * FROM table1 WHERE MATCH(txt) AGAINST('+(bear teddy "me and my")' IN BOOLEAN MODE)

输出:

txt
here is a bear
this is a teddy
me and my children
a teddy bear
me and my bear
what about me and my life

如果我将查询更改为

SELECT * FROM table1 WHERE MATCH(txt) AGAINST('+(bear teddy "me and all my")' IN BOOLEAN MODE)

我失去了我和我的孩子"价值,但保持"我和我的泰迪熊"因为它包含"泰迪熊"和"熊"。

txt
a teddy bear
me and my teddy bear
here is a bear
this is a teddy

在任何情况下都不会包含仅包含其中一个单词" me","和"或者"我的"被选中。

SQLFIDDLE