MySQL Apostrophe - Как избежать и вернуть правильные результаты с MATCH / AGAINST - PullRequest
0 голосов
/ 31 октября 2011

У меня есть таблица вроде этого:

TABLE BOOKS
ID   TITLE             SUBTITLE
------------------------------------
1    Don't Forget      
2    Twenty/Twenty      How To Subtitle
3    Red Riding Hood    Another Subtitle
4    The Three Bears
5    The Threev Bears

MySQL:

SELECT * FROM books WHERE MATCH (titl, subt) AGAINST ('+don\'t*' IN BOOLEAN MODE)

Этот запрос возвращается для меня (в phpMyAdmin, я все еще не уверен, как избежать апостроф в PHP) следующее:

   ID  TITLE
   -------------------------------
   1   Twenty/Twenty
   2   The Threev Bears

Я не уверен, почему я получаю "Три медведя" , а не "Три медведя" тоже? "Три" пропущенное слово?

Кроме того, почему я получаю "Двадцать / Двадцать" но не "Не забудь" ? Это единственный результат, который я хочу получить от этого.

Спасибо за помощь!

1 Ответ

1 голос
/ 31 октября 2011

У вас есть несколько вопросов здесь, поэтому позвольте мне попытаться ответить на них.

Во-первых, вы правы three действительно пропущенное слово.По умолчанию в MySQL есть список игнорируемых или «стоп» слов , которые не проиндексированы.Вы можете настроить это.Идея состоит в том, чтобы не загромождать ваш индекс очень распространенными словами, которые возвращают большой процент результатов.

Чтобы избежать символов в PHP, вам действительно следует использовать параметризованные запросы или, по крайней мере, использовать msql_real_escape_string. Вот отличный SO пост на эту тему

Наконец, причина, по которой вы получаете Twenty/Twenty, но не Don't forget, заключается в том, что Don't также является стоп-словом.TwentyTwenty совпадает с t* Я считаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...