Имя: Пароль:
1C
1C 7.7
v7: 1sqlite и полнотекстовый поиск
0 1snik_d
 
15.03.23
17:58
Всем привет. Клиенты пользуются компонентой 1sqlite от Орефкова версии 1.0.2.6 для поиска данных в больших таблицах. Версия 1с dbf. Поиск нечеткий, т.е. требуется найти совпадение в любой части искомой строки. Соответственно используется like в запросе. Работает достаточно сносно, но при поиске не задействован индекс. Нашел, что в sqlite есть полнотекстовый поиск FTS4 или FTS5, но так понимаю, что Орефков в сборку такой функционал не добавлял. Может кто прикручивал такую штуку?
1 Волшебник
 
15.03.23
18:02
заведите ещё одну таблицу "FulltextIndex".

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

В поисковом выражении используйте
FulltextIndex.word LIKE "слово%"

Важно, чтобы слева не было знака процента, тогда будет задействован индекс по полю.
2 1snik_d
 
15.03.23
18:36
(1) Это я знаю, что like без % впереди по индексу работает. По словам не получится разбить, т.к. нужно искать именно внутри слов, например, "Замазка", а искать будут маз.
3 Garykom
 
15.03.23
18:38
Прикрутить FTS к dbf версии 1С не получится
Один фиг нужны отдельные таблицы

Используй метод N-грамм
4 Garykom
 
15.03.23
18:40
И кстати поиск у вас вполне "четкий"
5 Garykom
 
15.03.23
18:43
(3)+ https://habr.com/ru/post/114997/

строится табличка-"индекс" из трехсимвольных сочетаний
каждому сочетанию из 3 символов сопоставляются записи где оно есть

затем то что ищется разбивается со смещением на всевозможные 3-символы и они ищутся в табличке-индексу
далее по кол-ву совпадений выводится что надо
6 Garykom
 
15.03.23
18:44
7 Garykom
 
15.03.23
18:46
Замазка = зам, ама, маз, азк, зка

Логично что поиск "маз" выдаст ссылку на "Замазка", причем индексы СУБД хорошо пашут
8 1snik_d
 
15.03.23
20:05
(5) Да, не, так не пойдет. Это же я просто для примера написал, а так могут и 3, и 4, и 5 символов ввести для поиска. В общем случае n символов. Мне что же, на каждое количество свои таблички городить? Так поиск по ним будет дольше, чем full scan по первоначальной сделать.
9 1snik_d
 
15.03.23
20:06
Плюс эти таблички надо актуализировать постоянно, данные то не статичны, а это тоже затраты временные.
10 Djelf
 
15.03.23
20:09
Это так работать не будет.
11 Волшебник
 
модератор
15.03.23
21:03
(8) Сделайте поиск асинхронным, чтобы пользователь мог заниматься своими делами, пока фоновое задание ищет "замазку".

Плюс выдавайте промежуточные результаты по мере нахождения с возможностью прервать поиск.
12 Garykom
 
15.03.23
20:29
(8) блин подучи теорию
свое слово из "3, и 4, и 5 символов ввести для поиска" разбиваешь аналогично со смещением по 3 символа
и их ищешь
чем больше совпадений тем ближе
13 Garykom
 
15.03.23
20:29
(9) а ты думал в сказку попал?
14 1snik_d
 
15.03.23
20:31
(12) Это все фигня, из области рассуждений про розовых пони. Будем микросервис городить, который будет быстро искать, а 1С только в качестве клиента выступать будет.
15 1snik_d
 
15.03.23
20:32
Нахрена велосипед с поиском свой изобретать, когда умные дяди уже все сделали за нас, просто хотелось обойтись малой кровью.
16 Garykom
 
15.03.23
20:32
(14) это не фигня а реально рабочее решение
на чем его делать на 1С или внешним пофиг
17 Garykom
 
15.03.23
20:33
(15) ты извини не очень понимаешь
твои умные дяди ничего не знают от твоих табличках DBF в которых 1С данные хранит
18 1snik_d
 
15.03.23
20:34
(17) Какая разница в чем хранятся данные, таблицы - они и в Африке таблицы.
19 1snik_d
 
15.03.23
20:35
1sqlite умеет же с таблицами dbf 1с-скими работать
20 1snik_d
 
15.03.23
20:37
(12) Это все понятно, только все-равно коряво, поиск в 2 прохода придется делать, сначала искать совпадения, потом считать их количество, а потом еще по какому-то критерию это количество анализировать
21 Garykom
 
15.03.23
20:38
в чем проблема при перезаписи справочников или документов для нужных реквизитов делать (5) и писать куда то
а затем при поиске разбивать искомое слово на N-граммы и искать их, затем сортировать по кол-ву совпадений и выводить

Замазка = зам, ама, маз, азк, зка
Смазка = сма, маз, азк, зка
Камаз = кам, ама, маз
Мазок = маз, азо, зок

Допустим ищем "мазо" = маз, азо

Совпадения "маз" - 4 (Замазка, Смазка, Камаз, Мазок), "азо" - 1(Мазок)
Пересечение только "Мазок" - его и выводим

Какие проблемы это сделать?
22 1snik_d
 
15.03.23
20:40
(21) Да нет проблем, только я не уверен, что это будет быстрее, чем сейчас работать
23 Garykom
 
15.03.23
20:41
(22) метод N-грамм применяется и гуглом и яндексом ))

Будет работать и очень быстро
24 1snik_d
 
15.03.23
20:46
(23) Как быстро в 1С пересечение таблиц определить без их перебора?
25 Злопчинский
 
15.03.23
20:46
(0) есть strmatch (нечеткий поиск от scorp) - куда УЖЕ ВСТРОЕН скулайт как раз для вот такого вот ускорения и работает очень быстро на больших массивах.
взять можно у Djelf (причем он регулярно обновляет strmatch с выходом значимых версий скулайта)
26 1snik_d
 
15.03.23
20:49
(25) во, вот это дело )) Нифига там уже версии какие, а у моих все по старинке ))
27 Волшебник
 
15.03.23
20:51
Быстрый поиск делается строго без таблиц.
Или на крайний случай в колоночных СУБД.
https://ru.wikipedia.org/wiki/Столбцовое_хранение
28 Злопчинский
 
15.03.23
20:52
стрматч вообще хорошо работает на чем более длинные строки сравниваются.
юзал стрматч на куче задач - вполне удовлетворяет по релевантности, почти всегда - если нужной позиции нет в первой пятерке похожих - то ее или вообще нет или называется так что хрен поймешь что это одно и то же ;-). В strmatch можно еще задавать веса цифр, входящих в поисковые строки. При этом strmatch штатный вроде как выкидывает нефонетические символы, грубо говоря Счет№1 и Cчет№(/)1 будет одно и то же. Специально не проверял, т.к. на своих задачах почему-то изначально сравниваемые строки принудительно очищал от незначимых символов. а провести тесты сейчас - влом запросто так (поле применения очень малое)
.
при этом нискольо не спорю насчет триграмм и прочих методов. каждый юзает что ему удобно и что считает подходящим для задачи.
.
по нечеткому посику с типовой strmatch смотри на ИС пример мой для загрузки заявок от клиентов с нечетким поиском "Удар по бездуховности"
29 Злопчинский
 
15.03.23
20:53
там же на ИС, кстати вроде есть статья где сравнивается нескольо методов нечеткого поиска - будет интересно - ищи сам...
30 Garykom
 
15.03.23
21:20
(24) в sql пересечение это внутреннее соединение INNER JOIN
31 Garykom
 
15.03.23
21:26
(30)+ в смысле (21) прекрасно реализуется средствами 1sqlite для dbf'ной 1С 7.7
или через 1С++ для sql 1C
32 Garykom
 
15.03.23
21:26
(25) ТС надо искать по базе
33 1snik_d
 
15.03.23
21:39
(31) Попробую сделать через триграммы, прям даже интересно, что получится.
34 1snik_d
 
15.03.23
22:16
В общем придется делать, strmatch не совсем то, что нужно.
35 Волшебник
 
15.03.23
22:26
(33) Потом отпишись в ветке, интересно
36 Злопчинский
 
16.03.23
00:22
(24) в 1с++ в ИТЗ (индексированные таблицы) есть для таблиц значений - и лефт джойн, и прочее
ВнутреннееСоединение / InnerJoin
ЛевоеСоединение / LeftJoin
ПравоеСоединение / RightJoin
ПолноеСоединение / FullJoin
Объединить / Merge
Пересечение / Conjunction
Разность / Difference
Копия / Copy
37 Злопчинский
 
16.03.23
00:22
38 Злопчинский
 
16.03.23
00:23
(34) обоснуй конкретно почему не подходит
39 Злопчинский
 
16.03.23
00:35
(38) не считается (38). Нужен like, а не похожесть....
40 Злопчинский
 
16.03.23
07:55
41 Djelf
 
16.03.23
13:32
(33) Хм, триграммный токиназейр в fts5 я и не заметил.
Лови, развлекайся: https://cloud.mail.ru/public/YAQT/3bgLTJXi6

DROP TABLE IF EXISTS tri;
CREATE VIRTUAL TABLE tri USING fts5(ID UNINDEXED, DESCR, tokenize='trigram');
INSERT INTO tri (ID,DESCR)
SELECT 
Номенклатура.ID ID
,Номенклатура.DESCR DESCR 
FROM Справочник_Номенклатура AS Номенклатура;
SELECT * FROM tri('ивНо');
42 АгентБезопасной Нацио
 
16.03.23
08:21
(41) прикольно
43 Djelf
 
16.03.23
08:22
44 Volodja
 
16.03.23
09:07
(41) Собрал по примеру:
    _глБД_SQLite = СоздатьОбъект("SQLiteBase");
    _глБД_SQLite.Открыть(":memory:");
    Запрос = _глБД_SQLite.НовыйЗапрос();
    Запрос.ВыполнитьЗапрос("DROP TABLE IF EXISTS tri;
                            |CREATE VIRTUAL TABLE tri USING fts5(ID UNINDEXED, DESCR, tokenize='trigram');
                            |INSERT INTO tri (ID,DESCR)");

    ТекстЗапроса="
        |SELECT
        |    Клиенты.ID ID ,Клиенты.DESCR DESCR
        |FROM [Справочник.Клиенты] Клиенты;
        |
        |SELECT * FROM tri('Сташкова');";


Выдает весь справочник.
Что не так сделал? Не пойму
45 Djelf
 
16.03.23
09:17
(44) Раздели запросы вот так:

    База=СоздатьОбъект("SQLiteBase");
    База.Открыть("r:\base.db3");
    Запрос=База.НовыйЗапрос();
    Запрос.ВыполнитьЗапрос("DROP TABLE IF EXISTS tri;");
    Запрос.ВыполнитьЗапрос("
    |CREATE VIRTUAL TABLE tri USING fts5(ID UNINDEXED, DESCR, tokenize='trigram');
    |");
    Запрос.ВыполнитьЗапрос("
    |INSERT INTO tri (ID,DESCR)
    |SELECT
    |Номенклатура.ID ID
    |,Номенклатура.DESCR DESCR
    |FROM Справочник_Номенклатура AS Номенклатура;    
    |");
    тз=Запрос.ВыполнитьЗапрос("
    |SELECT * FROM tri WHERE DESCR LIKE '%ивНо%';
    |");
46 Злопчинский
 
16.03.23
09:22
а интересно, долго строит триграммный индекс/таблицу? ну скажем для 50'000-100'000 товаров?
и надо каждый раз ее грохать и сроить заново или можно обновлять?
47 Volodja
 
16.03.23
09:35
(44) ++ Спасибо
48 Volodja
 
16.03.23
09:35
(45) ++ Спасибо. Промахнулся
49 Djelf
 
16.03.23
09:43
(46) 520940 записей вида guid, заполнение 7498мс, запрос 2мс, база на диске 135мб
Прямой запрос к таблице 1С по like 400мс, но это в мономольном режиме
По ссылке в (43) все есть, как так нелизя обновлять? Конечно можно.
50 Volodja
 
16.03.23
09:46
(46) в базе ~114000 выполнялось ~4сек
51 1snik_d
 
16.03.23
12:32
(41) Круть, спасибо.
52 alyuev
 
16.03.23
13:00
(41) Да, зачетно. Надо попробовать.
53 1snik_d
 
16.03.23
13:02
Пиз..ц скорость )) Справочник - 180000 элементов, индекс около 4-5 секунд, поиск мгновенный просто. Я просто счастлив
54 1snik_d
 
16.03.23
13:21
Теперь второй вопрос ))) А обычный SQL так же ускорить для like возможно? Периферийки на DBF, центр в SQL
55 1snik_d
 
16.03.23
13:21
1cpp используется, прямые запросы тоже.
56 Arbuz
 
16.03.23
16:37
(41) Да это праздник какой-то.
57 Djelf
 
16.03.23
16:58
(56) Как то проглядел, было введено 2020-12-01 (3.34.0) https://www.sqlite.org/draft/changes.html
Довольно не плохо выглядит, а 100кб это не размер (ну не 700кб, а 800кб будет), оставлю эту опцию при следующих сборках.
58 Djelf
 
16.03.23
17:23
+(57) Сейчас в сборке:
+ математика(зачем синусы в клюшках я не понимаю, но пусть будут);
+ модуль json, это очень просто и очень быстро https://www.sqlite.org/json1.html
если захочется хмл таким же образом распарсить, то есть модуль xml_to_json https://cloud.mail.ru/public/9znr/ZJ6ULE9aR
+ модуль fts5 c 2023/03/16
59 Arbuz
 
16.03.23
17:41
(58) regexp же встроенный?
60 Djelf
 
16.03.23
17:50
(59) Нет, это сторонним модулем. Слишком много вариантов реализаций.
61 Arbuz
 
16.03.23
17:58
(60) Я почему то думал, что он встроенный из-за этого:
2021-06-18 (3.36.0)
...
The REGEXP extension is now included in CLI builds.
хотя написано же в CLI версии...
62 1snik_d
 
16.03.23
19:14
(58) Где же ты раньше был, друг?
63 Злопчинский
 
16.03.23
19:24
(56) нашествие живых мертвецов ;-)
64 АгентБезопасной Нацио
 
16.03.23
19:36
(63) зомби бессмертны...
65 Волшебник
 
16.03.23
21:39
Вот не пойму:
то ли добавить Вас в Книгу знаний,
то ли удалить, потому что в восьмёрке уже всё реализовано штатными средствами платформы...
66 1snik_d
 
16.03.23
21:52
(65) Восьмерка еще сырая ))
67 Злопчинский
 
17.03.23
00:32
(66) она отсырела, заржавела и вертится со скрипом ;-)
69 Djelf
 
17.03.23
07:48
UPD: По поводу обновления.
Потребуется слегка изменить таблицу fts5. Финальный вариант ниже.
Обратите внимание: у fts5 есть колонка ROWID с первичным индексом и у 7ки тоже, соответсвие полей будет по этой колоке.
Проверка неоходимости обновления сначала по VERSTAMP, затем по DESCR, так чуток быстрее.
Кстати, запросы вставки и обновления возвращают количество измененных записей.
[b]
DROP TABLE IF EXISTS tri;
CREATE VIRTUAL TABLE tri USING fts5(ID UNINDEXED, DESCR,VERSTAMP UNINDEXED, tokenize='trigram');

/* заполнение fts5 */
INSERT INTO tri(ROWID,ID,DESCR,VERSTAMP)
SELECT
    Номенклатура.ROWID,
    Номенклатура.ID,
    Номенклатура.DESCR,
    Номенклатура.VERSTAMP
FROM Справочник_Номенклатура AS Номенклатура;

/* обновление fts5 */
INSERT OR REPLACE INTO tri(ROWID,ID,DESCR,VERSTAMP)
SELECT
    Номенклатура.ROWID,
    Номенклатура.ID,
    Номенклатура.DESCR||'xxxxx', /* xxxxx для проверки что сработало */
    Номенклатура.VERSTAMP
FROM Справочник_Номенклатура AS Номенклатура
LEFT JOIN tri
    ON tri.ROWID = Номенклатура.ROWID
    AND tri.VERSTAMP = Номенклатура.VERSTAMP
    AND tri.DESCR = Номенклатура.DESCR
WHERE tri.ROWID IS NULL;

/* запрос к fts5 */
SELECT
    tri.ID [Номенклатура :Справочник.Номенклатура]
    ,highlight(tri, 1, ' {', '} ') DESCR /* жаль что тп не умеет выделять слова цветом, ну хоть так */
    ,VERSTAMP
    ,ROWID
FROM tri('рус OR лат NOT мат');
[/b]
70 alyuev
 
17.03.23
11:39
А с триггерами что-то может получиться?

[code]
CREATE TABLE tbl(a INTEGER PRIMARY KEY, b, c);
CREATE VIRTUAL TABLE fts_idx USING fts5(b, c, content='tbl', content_rowid='a');

- Триггеры для поддержания индекса FTS в актуальном состоянии.
CREATE TRIGGER tbl_ai AFTER INSERT ON tbl BEGIN
  INSERT INTO fts_idx(rowid, b, c) VALUES (new.a, new.b, new.c);
END;
CREATE TRIGGER tbl_ad AFTER DELETE ON tbl BEGIN
  INSERT INTO fts_idx(fts_idx, rowid, b, c) VALUES('delete', old.a, old.b, old.c);
END;
CREATE TRIGGER tbl_au AFTER UPDATE ON tbl BEGIN
  INSERT INTO fts_idx(fts_idx, rowid, b, c) VALUES('delete', old.a, old.b, old.c);
  INSERT INTO fts_idx(rowid, b, c) VALUES (new.a, new.b, new.c);
END;
[/code]
71 Djelf
 
17.03.23
11:54
(70) Это можно использовать если таблица не 1С, а sqlite. На таблицу 1С триггеров не повесить.
72 1snik_d
 
17.03.23
12:32
Нашел проблему в компоненте: если одновременно наложить больше 3 условий %like% происходит вылет 1С
73 1snik_d
 
17.03.23
12:33
Ругается именно на 1sqlite.dll на компоненту
74 1snik_d
 
17.03.23
12:37
Вот такой запрос
ТекстЗапроса = "
SELECT
  ID [ID :Справочник.НоменклатураПоставщиков]
FROM
  trinp
WHERE
  KONTRAGENT IN (SELECT VAL FROM СписокАктивныхПоставщиков)
  AND DESCR LIKE '%кастор%'
  AND DESCR LIKE '%масл%'
  AND DESCR LIKE '%30%'
  AND DESCR LIKE '%мл%'
ORDER BY PRIORITY"
75 Garykom
 
17.03.23
12:39
(74) имхо превышение по ram
76 1snik_d
 
17.03.23
12:39
Не, не в количестве AND дело, вылет, если в LIKE меньше 3 символов и таких LIKE несколько
77 Garykom
 
17.03.23
12:40
(75)+ движок sqlite кушает в этом случае много памяти, вот и вылетает ВК
78 1snik_d
 
17.03.23
12:40
SELECT
  ID [ID :Справочник.НоменклатураПоставщиков]
FROM
  trinp
WHERE
  KONTRAGENT IN (SELECT VAL FROM СписокАктивныхПоставщиков)
  AND DESCR LIKE '%кастор%'
  AND DESCR LIKE '%масл%'
  AND DESCR LIKE '%300%'
  AND DESCR LIKE '%мл%'
ORDER BY PRIORITY"

Вот так работает без вылета
79 1snik_d
 
17.03.23
12:41
Костыль прикручу конечно, но интересно из-за чего это происходит
80 Garykom
 
17.03.23
12:41
ты понимаешь что в случае биграмм метод триграмм уже не может работать как задумано
81 1snik_d
 
17.03.23
12:42
(80) но почему-то только на втором LIKE падает
82 Garykom
 
17.03.23
12:43
по факту твое '%мл%' выливается в '% мл%' or '%мл %' or '%млА%' or '%млБ%' or '%млВ%' or '%млГ%' or ...
83 Garykom
 
17.03.23
12:44
(81) FTS с триграммами не работают на двух символьных
полный перебор идет
84 1snik_d
 
17.03.23
12:59
т.е. на один LIKE памяти хватает, а дальше - все
85 alyuev
 
17.03.23
13:03
А если вместо LIKE попробовать MATCH? Только уже % не нужен в строке поиска
86 1snik_d
 
17.03.23
13:04
(85) Ща, смоделируем
87 1snik_d
 
17.03.23
13:06
То же самое, вылет на втором условии
88 Garykom
 
17.03.23
13:11
(84) проверь без FTS так же вылетает?
89 1snik_d
 
17.03.23
13:12
Без FTS все работает, но медленно
90 1snik_d
 
17.03.23
13:13
Буду костылить, запрещу меньше 3 символов отправлять в поиск и все
91 1snik_d
 
17.03.23
13:14
(82) чтобы вот такой херни не было
92 Djelf
 
17.03.23
13:15
(83) Нет, на 2х символах вообще никакого перебора нет, поиск только начиная с 3х символов.
(72) Это достаточно нежная таблица, защиты от дурака в ней почти нет.
А поиск лучше делать по MATCH

FROM trinp
WHERE trinp MATCH 'кастор OR масл OR 300'
или так, для MATCH порядок слов не важен
WHERE trinp MATCH 'кастор AND масл AND 300'
93 Garykom
 
17.03.23
13:22
WHERE trinp MATCH 'кастор AND масл AND 30 AND мл'
интересно что будет
94 Djelf
 
17.03.23
13:24
(93) Будет 0 строк.
95 1snik_d
 
17.03.23
13:29
(94) Неа, будет результат, причем 30 фильтранется
96 1snik_d
 
17.03.23
13:29
т.е. версия Garykom верная
97 1snik_d
 
17.03.23
13:29
Вот так WHERE trinp MATCH 'кастор AND масл AND 30
98 1snik_d
 
17.03.23
13:30
AND мл - вылет
99 1snik_d
 
17.03.23
13:30
т.е. фулскан таблицы таки делается
100 1snik_d
 
17.03.23
13:34
Уточняю после проверки: с LIKE 30 фильтруется, с MATCH - не фильтруется
101 1snik_d
 
17.03.23
13:35
Но MATCH все равно роняет 1С если 2 раза пихнуть 2-х символьную строку
102 alyuev
 
17.03.23
13:38
Да, и спец символы не ищет. Т.к. режим триграмм убирает всякие точки, запятые, # и пр.. Я попробовал сделать поиск у себя хештег типа #хештег - выдало ошибку поиска " fts5: syntax error near "#""
103 1snik_d
 
17.03.23
13:38
Бл.. я ничего не понимаю, match перестал ронять 1С
104 1snik_d
 
17.03.23
13:39
Но логично в принципе, он не фулсканит таблицу, значит не жрет память, в отличии от LIKE
105 alyuev
 
17.03.23
13:42
(102) Может, если создать таблицу в режиме tokenize = "ascii tokenchars '-_#'" - тогда будет искать и спецсимволы. То тогда в строке поиска нужно будет использовать маску вроде "масл*"
106 Garykom
 
17.03.23
13:47
(99) там не совсем фуллскан
перебор триграмм идет для поиска биграмм в них, а затем уже по найденным триграммам быстро ищет
но кол-во триграмм велико, вот и вылет

для проверки можешь попробовать на скольки триграммах аналогично вылетает
если продолжить строку WHERE trinp MATCH 'ааа AND ааб AND аав AND ааг AND ...'
107 Garykom
 
17.03.23
13:48
(106)+ т.е. проблема не в "30" а "мл"
"30" редкое сочетание
а вот "мл" в куче слов думаю есть
108 1snik_d
 
17.03.23
13:49
(106) нафиг, проблему главное решили, причины понятны. Бум знать на будущее
109 1snik_d
 
17.03.23
13:50
ну немного хуже в плане удобства по сравнению без FTS, но скорость в моем случае важнее удобства, привыкнут
110 Djelf
 
17.03.23
14:08
Проблема с памятью легко решается.
Нужно просто открыть базу sqlite не в пямяти, а на диске.
Чуток медленне, зато можно такую базу открывать несколькими пользователями.
(109) Можно отключить индекс плюсиком

WHERE tri MATCH 'пив' /* сначала поиск >=3х символов по индексу  */
AND +DESCR LIKE '%30%'   /* затем поиск в найденом <=2х символов без индекса */
111 1snik_d
 
17.03.23
14:16
(110) Да ты чертов гений (в хорошем смысле этого слова), теперь прям совсем хорошо стало. Пользоваться можно как раньше, но скорость как сейчас.
112 1snik_d
 
17.03.23
14:20
(110) А точно надо вот так WHERE tri MATCH 'пив' искать по индексу, а не WHERE DESCR MATCH 'пив'
113 Djelf
 
17.03.23
14:54
(112) В описании https://www.sqlite.org/fts5.html довольно мутно описано.
Предполагаю что по tri идет поиск по всем индексированным колонкам в таблице (у нас она одна), а по DESCR только по колонке DESCR.
Кроме того посмотри пункт 3.6 там в MATCH можно указать конкретные колонки по которым идет поиск.
114 1snik_d
 
17.03.23
15:00
(113) Получается последующие условия AND в запросе учитывают результаты предыдущих условий AND? Я всегда думал, что они одновременно накладываются.
115 Djelf
 
17.03.23
15:04
(114) Ну это же не 7ка, где в ЕСЛИ выполнятся все условия, что является полным идиотизмом.
Первое условие не прошло, второе уже не выполняется.
116 alyuev
 
17.03.23
15:37
(113). Да. Поиск WHERE tri - это и есть полнотекстовый поиск. По всем колонкам сразу. Движок создает автоматически колонку с именем таблицы и пихает туда весь текст со всех остальных колонок.
117 Злопчинский
 
18.03.23
00:14
круть.
народ умный, что капец...
118 Злопчинский
 
18.03.23
00:30
В аду для перфекционистов нету ни серы, ни огня, и лишь слегка несимметрично стоят щербатые закопчённые котлы.
119 MWWRuza
 
18.03.23
00:35
+(118) :-)
120 From_RB
 
20.03.23
17:14
Немного оффтоп: Если SQL вариант работы 7.7 какой есть альтернативный вариант полнотекстового поиска вместо 1sqlite+FTS5