Проблемы с апострофами / стоп-словами в MYSQL поиске FULLTEXT - PullRequest
0 голосов
/ 14 марта 2019

Я использую Mysql 5.6.33, настраиваю поиск ПОЛНОГО ТЕКСТА.

Мне известно, что в этой версии есть проблема с апострофами, из-за которой они, похоже, создают проблемы при поиске. https://bugs.mysql.com/bug.php?id=69932

Я попытался обойти эту проблему, сохранив как исходную строку, так и версию с апострофами, удаленными в столбец с индексом FULL TEXT. Но поиск по нему не дает оценку:

SELECT record_id, keywords, 
  MATCH keywords AGAINST ("+ill +be +there" IN BOOLEAN MODE) AS score  
FROM my_table_name 
WHERE record_id = 12336
ORDER BY score DESC;
+-----------+----------------------------+-------+
| record_id | keywords                   | score |
+-----------+----------------------------+-------+
|     12336 | i'll be there ill be there |     0 |
+-----------+----------------------------+-------+
1 row in set (0.03 sec)

Согласно этой ошибке выполнение логического поиска с +I'll не удастся. Но здесь я выполняю булевский поиск по ill, без апострофа, который находится в поле. Но все равно получаю балл 0. Если я перехожу в режим ЕСТЕСТВЕННОГО ЯЗЫКА, он работает нормально.

Я предполагаю, что какой бы ни была ошибка, она нарушает индекс и для неапострофной версии слова, что довольно раздражает.

Кто-нибудь сталкивался с этим и нашел исправление / обходной путь?

РЕДАКТИРОВАТЬ : на самом деле это становится еще более странным / более глючным, и похоже, что проблема может заключаться в том, что присутствие стоп-слова заставляет его возвращать ноль баллов:

mysql> SELECT record_id, keywords, MATCH keywords AGAINST ("+be +there" IN BOOLEAN MODE) AS score  FROM squirrel_digilearning_modules  WHERE record_id = 12336  ORDER BY score DESC;
+-----------+--------------+-------+
| record_id | keywords     | score |
+-----------+--------------+-------+
|     12336 | ill be there |     0 |
+-----------+--------------+-------+
1 row in set (0.00 sec)

mysql> SELECT record_id, keywords, MATCH keywords AGAINST ("+there" IN BOOLEAN MODE) AS score  FROM squirrel_digilearning_modules  WHERE record_id = 12336  ORDER BY score DESC;
+-----------+--------------+-------------------+
| record_id | keywords     | score             |
+-----------+--------------+-------------------+
|     12336 | ill be there | 7.561973571777344 |
+-----------+----------------------------------+

Почему "+ там" соответствует "+ быть + там", не? Тогда это:

mysql> SELECT record_id, keywords, MATCH keywords AGAINST ("+ill +there" IN BOOLEAN MODE) AS score  FROM squirrel_digilearning_modules  WHERE record_id = 12336  ORDER BY score DESC;
+-----------+--------------+-------------------+
| record_id | keywords     | score             |
+-----------+--------------+-------------------+
|     12336 | ill be there | 17.85671615600586 |
+-----------+--------------+-------------------+
1 row in set (0.00 sec)

Выше я сопоставляю слова "плохо" и "там" и получаю хороший результат. Итак, проблема на самом деле "быть"! Я думаю, что это может быть потому, что «быть» это стоп-слово:

mysql> SELECT GROUP_CONCAT(value) FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD;
+-----------------------------------------------------------------------------------------------------------------------------------------+
| GROUP_CONCAT(value)                                                                                                                     |
+-----------------------------------------------------------------------------------------------------------------------------------------+
| a,about,an,are,as,at,be,by,com,de,en,for,from,how,i,in,is,it,la,of,on,or,that,the,this,to,was,what,when,where,who,will,with,und,the,www |
+-----------------------------------------------------------------------------------------------------------------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...