Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / FULLTEXT ngram / 5 сообщений из 5, страница 1 из 1
16.07.2017, 10:20
    #39489654
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FULLTEXT ngram
Кто то может подсказать, почему 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
16.07.2017, 10:32
    #39489659
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FULLTEXT ngram
Хотя позавчера тестировал на 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
16.07.2017, 10:39
    #39489661
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FULLTEXT ngram
Пересоздал индекс, заработал. Чудеса.
...
Рейтинг: 0 / 0
16.07.2017, 10:48
    #39489663
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FULLTEXT ngram
гм, ладно, другой вопрос,
вот я создал ngram индекс:
ALTER TABLE address_object ADD FULLTEXT INDEX IDX_ngram__FORMALNAME(FORMALNAME) WITH PARSER ngram;

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

Я таблицу скопировал, и после этого перестало работает IN NATURAL LANGUAGE. Т.е. он при копировании создал индекс как-то по другому, видимо.
...
Рейтинг: 0 / 0
16.07.2017, 13:22
    #39489702
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FULLTEXT ngram
В общем-то разобрался. 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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / FULLTEXT ngram / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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