Search code examples
mysqlfull-text-searchstop-words

ignoring mysql fulltext stopwords in query


I'm building a search for a site, which utilizes a fulltext search. The search itself works great, that's not my problem. I string together user provided keywords (MATCH... AGAINST...) with AND's so that multiple words further narrow the results. Now, I know that certain stop words aren't indexed, and that's fine with me I don't really want to use them as selection criteria. But, if a stopword is provided in the keyword set (by the user), it kills all the results (as expected) even if the word actually is in a certain text block.

My question: is there any way to check to see if a certain word is a stop word at the time of the query? My preferred solution would just be to exclude the relevant word from the search criteria (I don't care if a user can narrow results by the word 'neither', I just don't want MySQL to return an empty result set because the user provided it, even though neither does exist in the results). Or, am I just going to have to empty the stopword list? Thanks very much for any help.

edit ---- I'm sorry, but there's really no code snippets to provide for this one. The code works fine, actually exactly as expected. It's more of a logical problem I'm dealing with. But as an example, in the way of explanation:

lets say there are three records, which include the words (but are not limited to)

1: apple, orange, mango, banana 2: grape, orange, pineapple, mango 3: potato, mango, melon, keira knightly

If the search word entered by the user is mango, all results are returned correctly. If the words are orange AND mango, results 1 and 2 are returned (correctly). Now, let's say banana is a stop word (it's not... but let's assume it is), if the search is for orange, mango, AND banana, no results are returned (because banana isn't in the fulltext index).

What I'm looking for is if anyone else has encountered this problem, and has a way to work around it. Sort of an:

if 'banana' NOT STOP WORD match 'banana' against `words`. (OBVIOUSLY not real code).

Or... am I just going to have to drop the stopword list...


Solution

  • You can verify the keywords by comparing all stopwords. Here is the list of stopwords I've found out a solution to disable stopwords from fulltext. You just need to locate .cnf file and add this,

    ft_stopword_file = ""
    

    restart mysql engine and rebuild indexes;

    Hope this work