我使用全文布尔匹配https://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
作品
匹配bear
,跳过其余部分:
+bear
作品
匹配bear
或teddy
,跳过其余部分:
+(bear teddy)
不起作用
对我来说,预期的行为是bear
或teddy
或me and my
,跳过其余部分。它不起作用,因为我没有得到结果。
+(bear teddy '"me and my"')
如何获得预期结果?
答案 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","和"或者"我的"被选中。