Как сделать быстрый полнотекстовый поиск по MySQL для поля с автозаполнением?
Есть таблица с 200к + записями. Требуется быстрый поиск по двум полям : тэги и заголовки.
Поиск для автокомплита. Т.е ввели два символа и все заголовки, где есть это сочетание букв и все заголовки в тегах которых есть это сочетание букв должны подгружаться в список.
Читал про возможности быстрой работы , если заранее грузить данные (только заголовки, тэги и ID записи) на клиент и искать без обращения к БД. В том случае все работало прекрасно с 10.000 элементов. Есть подозрение, что 200.000 это немного иная ситуация. Ясно что использование дефолтного автокомплита от JQuery здесь даст тормоза, даже если реализовать кэширование на клиенте и уменьшить delay в настройках этого автокомплита.
Про Sphinx слышал, но не имел с ним дела и не уверен, что данный инструмент здесь будет годен.
coderisimo
@coderisimo Автор вопроса, куратор тега JavaScript
У них даже подробности есть на эту тему. sphinxsearch.com/blog/2013/05/21/simple-autocomple...
Но я , как вечный джуниор, с ними еще не имел дела, думал, может, есть решения попроще. Возможно, это повод познакомиться ))
coderisimo
@coderisimo Автор вопроса, куратор тега JavaScript
Вас понял. Будем дымиться мозгами )))
Написано
coderisimo
@coderisimo Автор вопроса, куратор тега JavaScript
А можно вопрос : мне поиск нужен для автоподстановки , а значит искать нужно по куску слова. Значит полнотекстовый поиск мне не подходит? Т.е я изначально неверно сформулировал вопрос и соответственно, ответы мимо ))
coderisimo: вам ещё и триграмы сюда надо бы и быстрый полнотекстовый пои ск
я лично вас понял сразу, а вы себя судя по всему нет.
Написано
coderisimo
@coderisimo Автор вопроса, куратор тега JavaScript
Возможно. Но я пытаюсь. Вначале я прочел про FULLTEXT в MySQL. Там полнотекстовый поиск производится именно по словам, что меня не устраивает , и ибо у меня куски слов. Соответственно, я решил, что полнотекстовый поиск в более общем смысле это всегда поиск по целым словам. Уточняющий вопрос - финкте.. тьфу сфинкс позволяет быстро искать куски слов в тексте , находящемся в базе?
Websocket будет быстр, но если его у вас нет в проекте - не факт, что рационально.
На клиент отдавать 200к не вариант, обвалится на большинстве компов.
А так, первое что приходит в голову - ajax с блокировкой всех запросов, кроме последнего. То есть ввели 1 символ - пошел запрос, но если до получения ответа был уже введен второй символ или изменился первый - первую операцию прерываем, а вторая пошла.