|
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
|
Ссылка на описание: https://runebook.dev/ru/docs/sqlite/fts5#the_experimental_trigram_tokenizer
|
|||
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) Раздели запросы вот так:
|
|||
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
|
|||
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) Можно отключить индекс плюсиком
|
|||
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |