MySQL Match Against In Boolean Mode returns nothing on middle word

时间秒杀一切 提交于 2019-12-08 07:58:00

问题


I've got a problem using Match Against in my MySQL database, and I'm hoping someone can help.

This is the examples of the data in my database:

id   name
1    really bitter chocolate
2    soft cheese

When I run this query:

SELECT * FROM food WHERE (name) LIKE "%bitter%"

This bring back the first result:

1    really bitter chocolate

However its part of a much larger query, and when I run the Match Against code, I don't get anything returned from either of these queries:

SELECT * FROM food WHERE MATCH (name) AGAINST ("bitter")

SELECT * FROM food WHERE MATCH (name) AGAINST ("bitter", IN BOOLEAN MODE)

I have full text searches turned on, and it works when I search the start of the name:

SELECT * FROM food WHERE MATCH (name) AGAINST ("really")

SELECT * FROM food WHERE MATCH (name) AGAINST ("really", IN BOOLEAN MODE)

Both of which returns:

1    really bitter chocolate

I've read through this for solutions: http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

And I've looked here: mysql WHERE MATCH AGAINST

Can someone please see where I am going wrong or point me in the right direction?

Thanks!

EDIT

Ok as per Woot4Moo great answer below I've changed my code to remove the comma which shouldn't have been there. I've also added in the + and putting it in single quotes but still no luck.

My current query now looks like this:

SELECT * FROM food WHERE MATCH (name) AGAINST ('+bitter' IN BOOLEAN MODE)

But it's returning no results in query browser, and not returning any errors or warnings.


回答1:


SELECT * FROM food WHERE MATCH (name) AGAINST ("bitter", IN BOOLEAN MODE)

looks like it should be:

SELECT * FROM food WHERE MATCH (name) AGAINST ('+bitter' IN BOOLEAN MODE)  

notice how mine has the plus sign + and NO comma ,

Basing it off of the example here

MySQL can perform boolean full-text searches using the IN BOOLEAN MODE modifier. With this modifier, certain characters have special meaning at the beginning or end of words in the search string. In the following query, the + and - operators indicate that a word is required to be present or absent, respectively, for a match to occur. Thus, the query retrieves all the rows that contain the word “MySQL” but that do not contain the word “YourSQL”:

mysql> SELECT * FROM articles WHERE MATCH (title,body)
    -> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);



回答2:


If this are the only two rows in your table then you have in 50% of the records the searched string and it will be ignored.



来源:https://stackoverflow.com/questions/19004674/mysql-match-against-in-boolean-mode-returns-nothing-on-middle-word

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!