Не удается получить полнотекстовый поиск MySQL для работы - PullRequest
1 голос
/ 03 марта 2011

У меня есть таблица, которую я хочу использовать для полнотекстового поиска, но, похоже, я не могу получить никаких результатов по моим условиям поиска.

Вот как выглядит моя таблица (я вынул несколько столбцов, которые, я уверен, не важны):

mysql> SHOW TABLE STATUS LIKE 'transcripts';
+-------------+--------+---------+------------+-------------------+----------+----------------+
| Name        | Engine | Version | Row_format | Collation         | Checksum | Create_options |
+-------------+--------+---------+------------+-------------------+----------+----------------+
| transcripts | MyISAM |      10 | Dynamic    | latin1_swedish_ci |     NULL |                |
+-------------+--------+---------+------------+-------------------+----------+----------------+

mysql> DESCRIBE transcripts;
+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| id          | int(11)  | NO   | PRI | NULL    | auto_increment |
| content     | text     | YES  |     | NULL    |                |
| raw_content | text     | YES  | MUL | NULL    |                |
| tape_id     | int(11)  | YES  |     | NULL    |                |
| state       | int(11)  | YES  |     | 0       |                |
| created_at  | datetime | YES  |     | NULL    |                |
| updated_at  | datetime | YES  |     | NULL    |                |
+-------------+----------+------+-----+---------+----------------+

mysql> SHOW INDEXES FROM transcripts;
+-------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
| Table       | Non_unique | Key_name          | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type |
+-------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
| transcripts |          0 | PRIMARY           |            1 | id          | A         |           2 |     NULL | NULL   |      | BTREE      |
| transcripts |          1 | raw_content_index |            1 | raw_content | NULL      |        NULL |     NULL | NULL   | YES  | FULLTEXT   |
+-------------+------------+-------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+

Доказательство того, что есть строка для поиска:

mysql> SELECT id, raw_content FROM transcripts;
+----+-------------+
| id | raw_content |
+----+-------------+
|  1 | foo         |
+----+-------------+

И вот мои неустанные попытки заставить поиск работать:

mysql> SELECT * FROM transcripts WHERE MATCH(raw_content) AGAINST ('foo');
Empty set (0.00 sec)

mysql> SELECT * FROM transcripts WHERE MATCH(raw_content) AGAINST ('foo' IN BOOLEAN MODE);
Empty set (0.00 sec)

mysql> SELECT id FROM transcripts WHERE MATCH(raw_content) AGAINST ('foo' IN NATURAL LANGUAGE MODE);
Empty set (0.00 sec)

mysql> SELECT * FROM transcripts WHERE MATCH(raw_content) AGAINST ('+foo*' IN BOOLEAN MODE);
Empty set (0.00 sec)

Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 03 марта 2011

по умолчанию полный текст игнорирует слова с 3 или менее символами

(теперь публикуется как ответ на запрос :))

3 голосов
/ 03 марта 2011

Вот еще кое-что, чтобы рассмотреть:

Вы можете не только изменить длину по умолчанию, но вы также можете изменить список стоп-слов. Вы можете изменить стоп-слова, потому что MySQL не будет индексировать этот список из 543 слов . Попробуйте создать свой собственный список стоп-слов и изменить минимальную длину слова.

Шаг 1) Создайте свой собственный список стоп-слов. Вы можете добавить «a», «an» и «the».

echo "a"> /var/lib/mysql/custom_stopwords.txt
echo "an" >> /var/lib/mysql/custom_stopwords.txt
echo "the" >> /var/lib/mysql/custom_stopwords.txt

Шаг 2) Добавьте эти параметры в /etc/my.cnf

ft_min_word_len = 2
ft_stopword_file = / вар / Lib / MySQL / custom_stopwords.txt

Шаг 3) перезапуск службы mysql

Шаг 4) Создайте новые индексы FULLTEXT. Любые существующие индексы FULLTEXT перед перезапуском mysql должны быть переиндексированы.

Попробуй !!!

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