powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / FULLTEXT ngram
5 сообщений из 5, страница 1 из 1
FULLTEXT ngram
    #39489654
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто то может подсказать, почему IN NATURAL LANGUAGE MODE работает на девелоперской среде окружения (под Windows), но тот же самый запрос не работает на Ubuntu (Percona кстати) ?

Код: sql
1.
SELECT fa.* FROM address_object fa WHERE MATCH(FORMALNAME) AGAINST ('Новсибирск' IN NATURAL LANGUAGE MODE) AND AOLEVEL = 4 LIMIT 10;



Название города намеренно написано с ошибкой. В первом случае все отрабатывает как ожидается (находит город), во втором результат пустой. Кодировка и сравнение везде одинаковые.

В BOOLEAN MODE одинаково вроде работает, но он с ошибками не ищет, только по строгому частичному совпадению
...
Рейтинг: 0 / 0
FULLTEXT ngram
    #39489659
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя позавчера тестировал на Ubuntu:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
mysql> select * from articles;
+------------+--------------------+
| FTS_DOC_ID | title              |
+------------+--------------------+
|          1 | Привет             |
|          2 | Приииивет          |
|          3 | Каг дила           |
|          4 | Каг дела           |
|          5 | Как дела           |
+------------+--------------------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title) AGAINST ('Привет' IN NATURAL LANGUAGE MODE);
+------------+--------------------+
| FTS_DOC_ID | title              |
+------------+--------------------+
|          1 | Привет             |
|          2 | Приииивет          |
+------------+--------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title) AGAINST ('де каг' IN NATURAL LANGUAGE MODE);
+------------+-----------------+
| FTS_DOC_ID | title           |
+------------+-----------------+
|          4 | Каг дела        |
|          3 | Каг дила        |
|          5 | Как дела        |
+------------+-----------------+
3 rows in set (0.00 sec)



Сегодня:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| articles       |
+----------------+
1 row in set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title) AGAINST ('Привет' IN NATURAL LANGUAGE MODE);
Empty set (0.02 sec)

mysql> select * from articles;
+------------+--------------------+
| FTS_DOC_ID | title              |
+------------+--------------------+
|          1 | Привет             |
|          2 | Приииивет          |
|          3 | Каг дила           |
|          4 | Каг дела           |
|          5 | Как дела           |
+------------+--------------------+
5 rows in set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title) AGAINST ('Каг' IN NATURAL LANGUAGE MODE);
Empty set (0.00 sec)



Как это понимать? Ничего не настраивал.
...
Рейтинг: 0 / 0
FULLTEXT ngram
    #39489661
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пересоздал индекс, заработал. Чудеса.
...
Рейтинг: 0 / 0
FULLTEXT ngram
    #39489663
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гм, ладно, другой вопрос,
вот я создал ngram индекс:
ALTER TABLE address_object ADD FULLTEXT INDEX IDX_ngram__FORMALNAME(FORMALNAME) WITH PARSER ngram;

это нигде не отображено, в DDL таблицы только сказывается FULLTEXT и ничего не про ngram.

Я таблицу скопировал, и после этого перестало работает IN NATURAL LANGUAGE. Т.е. он при копировании создал индекс как-то по другому, видимо.
...
Рейтинг: 0 / 0
FULLTEXT ngram
    #39489702
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то разобрался. DbForge не видит часть DDL:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
mysql> show create table articles\G
*************************** 1. row ***************************
       Table: articles
Create Table: CREATE TABLE `articles` (
  `FTS_DOC_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`FTS_DOC_ID`),
  FULLTEXT KEY `ngram_idx` (`title`) /*!50100 WITH PARSER `ngram` */
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

В частности /*!50100 WITH PARSER `ngram` */
отсюда все мои проблемы. В одном случае при пересоздании таблицы потерял этот блок, в другом, похоже что, после изменения ngram_token_size старый индекс перестал работать.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / FULLTEXT ngram
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]