ПОЛНОТЕКСТОВЫЙ ПОИСК в MySQL не возвращает строк

Я немного потерян, это похоже на некоторую глупую ошибку - но у меня нет подсказки, каково это может быть. Вот сеанс тестирования:

mysql> drop table articles;
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE TABLE articles (body TEXT, title VARCHAR(250), id INT NOT NULL auto_increment, PRIMARY KEY(id)) ENGINE = MYISAM;
Query OK, 0 rows affected (0.02 sec)

mysql> ALTER TABLE articles ADD FULLTEXT(body, title);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into articles(body) values ('Maya');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM articles  WHERE MATCH(title, body) AGAINST('Maya');
Empty set (0.00 sec)

mysql> select * from articles
    -> ;
+------+-------+----+
| body | title | id |
+------+-------+----+
| Maya | NULL  |  1 |
+------+-------+----+
1 row in set (0.00 sec)

Это идет "mysqld Ver, 5.1.37-1ubuntu5 для debian-linux-gnu на i486 ((Ubuntu))".

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

CREATE TABLE articles (body TEXT, title VARCHAR(250), id INT NOT NULL auto_increment, PRIMARY KEY(id)) ENGINE = MYISAM;
ALTER TABLE articles ADD FULLTEXT(body, title);
insert into articles(body) values ('Maya');
SELECT * FROM articles  WHERE MATCH(title, body) AGAINST('Maya');     
16
задан zby 9 August 2010 в 11:25
поделиться

2 ответа

В MySQL существует три типа полнотекстового поиска. :

  • логический поиск
  • поиск на естественном языке (используется по умолчанию)
  • поиск с расширением запроса

Из ручной ввод MySQL :

Поиск на естественном языке интерпретирует строка поиска как фраза в естественный человеческий язык (фраза на свободный текст). Нет особых операторы. Применяется список запрещенных слов. Кроме того, присутствуют слов в 50% или более строках считается обычным и не совпадают. Полнотекстовый поиск естественен язык ищет, если В ЕСТЕСТВЕННОМ Указан модификатор LANGUAGE MODE или если модификатор не указан.

Например, попробуйте добавить еще две записи:

INSERT INTO articles(body) VALUES ('Some text'), ('Another text');

И снова запустите тот же SELECT - все будет работать.

В качестве обходного пути вы можете использовать логический режим, в котором нет этого правила «50%»:

SELECT * FROM articles  WHERE MATCH(title, body) AGAINST('Maya' IN BOOLEAN MODE);
20
ответ дан 30 November 2019 в 21:45
поделиться

Слова в 50% или более строк не совпадают. См. Mysql doc: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

4
ответ дан 30 November 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: