powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Для поиска, надо ли делать обращение к БД после каждого введённого символа?
28 сообщений из 28, показаны все 2 страниц
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884534
palladin600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажите, хочу понять как работает быстрый поиск в форме на сайтах, вот когда начинаешь вводить символы, и тотчас же ниже подгружаются какие-то результаты.

Получается, человек на сайте вводит первый символ, и сервер отправляет запрос к БД?
Пользователь хочет найти некоторую улицу (скажем, Ленина), вбивает посимвольно в текстовое поле:
Л..
тут запрос идёт к БД:
Код: sql
1.
select streetname from streets where streetname like '%Л%'


вторую букву нажимает:
Ле..
Код: sql
1.
select streetname from streets where streetname like '%Ле%'


третью букву нажимает:
Лен..
Код: sql
1.
select streetname from streets where streetname like '%Лен%'


и т.д., пока не получит необходимый результат.

И вот вопрос: это нормально по каждому чиху (читай, по каждой букве) делать селект к базе? Это именно так делается в современном мире?
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884547
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600,

Нет, не нормально.
Обычно делают поиск с момента ввода n букв + кэширование
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884550
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600,

В поисковиках SQL вообще не используется. Там другая тема.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884552
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600И вот вопрос: это нормально по каждому чиху (читай, по каждой букве) делать селект к базе? Это именно так делается в современном мире?Тут есть два разных момента.

1. Делают ли селект к базе - зависит от системы, но да, часто делают, хотя, конечно, есть и другие варианты (скажем, хранение списков в виде массивов на клиенте или сервере приложений).

2. делают ли запрос при вводе каждой буквы - нет, это всегда делается асинхронно, ввод символов не прерывается, ожидая, пока сервер не ответил, а новый запрос уже будет формироваться, исходя из введённых к этому моменту символов (т.е, например, like '%Ле%' можно будет пропустить)

Это очень похоже на обработку некоторых событий в Windows API, когда некоторые типы событий сделаны "поглощающими", т.е. в очереди никогда не может быть более одного события данного типа.
Например, событие "перемещение мыши" не генерится на координаты каждого пикселя, а генерится на те координаты, которые есть на момент завершения обработки предыдущего события от мыши.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884553
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterВ поисковиках SQL вообще не используется. Там другая тема.Разве от синтаксиса принципы меняются?
Там тоже есть база, и при вводе символов в браузере последний отправляет запросы на сервер, а сервер шлёт запросы к БД.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884592
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, конечно. Так-то, эта тема к сиквелу никаким боком. Обычно делают "throttling" на клиенте - отправляют запрос к серверу только если строка поиска не менялась в течении определенного промежутка времени.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884644
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884654
Фотография defragmentator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600,

Я б сделал так: если походящих записей мало, то вытаскиваю из базы всё, что начинается на заданную букву и передаю на клиент. А там уже фильтрую.

Можно ещё подкачку в фоновом режиме сделать.

А если много записей, то да, будет медленно работать, но так никуда от этого и не уйдёшь.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884657
Андрей Юниор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве это не работа сервиса кэшировать выборки? Если использоваться ORM с кэшем?

Вообще нужно ещё делать вероятностный поиск - закладывать возможность и глубину опечаток...
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884658
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЮниорА разве это не работа сервиса кэшировать выборки? Если использоваться ORM с кэшем?Да и без ORM нужно кэшировать, при чём тут ORM?

Просто это уже детали реализации, и это не всегда можно сделать, не усложняя систему (например, может понадобится рефрешить кэш на всех компах-клиентах, при изменениях).
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884663
Андрей Юниор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgДа и без ORM нужно кэшировать, при чём тут ORM?
Я не понимаю, причём тут БД для реализации подсказок поиска.

Может я думаю о подсказках уровня Яндекс/Гугла/крупного интернет-магазина, а тут надо всего лишь подсказать заполнение отдельного поля в форме?
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884667
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЮниорЯ не понимаю, причём тут БД для реализации подсказок поиска.При том, что обращение к БД может быть единственным вариантом реализации функционала подсказок.
Андрей Юниора тут надо всего лишь подсказать заполнение отдельного поля в форме?Может, и так, но мы же не знаем задачи и условий.
И вот, рассказываем ТС про разные варианты.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884673
Андрей Юниор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgПри том, что обращение к БД может быть единственным вариантом реализации функционала подсказок.
БД - да. Но РСУБД - нет. РСУБД для крупного поисковика вряд ли вообще теоретически возможна.

Поэтому и вопрос... У майкрософта на ажуре вроде какая-то технология поиска была. Вроде как могла искать даже по pdf и docx файлам.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884692
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ЮниорalexeyvgПри том, что обращение к БД может быть единственным вариантом реализации функционала подсказок.
БД - да. Но РСУБД - нет. РСУБД для крупного поисковика вряд ли вообще теоретически возможна.Есть же промежуточные варианты, между поисковиком и базой парикмахерской.

Скажем, какая то база компании - контрагенты, или сотрудники - загружать сотни тысяч записей на клиента вроде бы не хочется, почему бы не искать в базе?
Андрей ЮниорПоэтому и вопрос... У майкрософта на ажуре вроде какая-то технология поиска была. Вроде как могла искать даже по pdf и docx файлам.И без ажура было.

Я только не понимаю, почему искать в СУБД можно, но только если это не РСУБД?
В РСУБД поиск будет дешевле и быстрее, чем в корявой базе полнотекстового индекса (из Ажура или ещё откуда то).
Всё таки ядра РСУБД оттачивались десятилетиями, и до сих пор их не забросили.

Андрей ЮниорПоэтому и вопрос... У майкрософта на ажуре вроде какая-то технология поиска была.И ещё, в контексте задачи ТС никакая индексация не поможет, т.е. все без исключения "технологии поиска" конкретно в этой задачи неприменимы.

Точнее, поможет специальная самодельная индексация, которую тут обсуждали на форуме.
А все стандартные не умеют индексировать с середины слова (или есть такие, которые умеют?)

То есть, в итоге, остаются варианты:

1. искать в СУБД, сделав свою индексацию, позволяющую искать фрагменты текста (неважно, в какой СУБД - можно и в РСУБД MSSQL)
2. сканировать таблицу в СУБД (неважно, какой - можно и в РСУБД MSSQL)
3. сканировать предварительно загруженные в память данные (массив, список и т.д.) на клиенте/сервере приложений.
4. ещё есть экзотический вариант - эмулировать индекс в словаре в памяти (ценой увеличения расхода памяти умножением на среднюю длину строки пополам), но это имеет смысл для очень больших нагрузок, когда нормальной скорости сканирования памяти в десятки гб/сек окажется недостаточно.

С соответствующими плюсами и минусами каждого варианта, и с наворотами типа кэширования для вариантов 1 и 2.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884775
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Вообще, конечно, интересный технический момент. Тоже всегда было интересно, как такой упреждающий поиск по части ввода под капотом работает.
наверное, - нужно изолировать окружение - фронт и бэк и, начиная вводить в поля формы, которые обладают такой "магией" мгновенного поиска-ответа - постоянно мониторить в открытом приложении Профайлера, что в итоге-то шлется на РСУБД и в каком виде. Пропускаются там лайки или нет, и какой в итоге код в базу летит
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884792
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgСкажем, какая то база компании - контрагенты, или сотрудники - загружать сотни тысяч записей на клиента вроде бы не хочется, почему бы не искать в базе?

Так речь в исходном посте про сайты, а там, если не ошибаюсь, эти данные кэшируются на сервере.

В общем, топик наверное нужно было создать в другом подфоруме.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884797
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgТочнее, поможет специальная самодельная индексация, которую тут обсуждали на форуме.
https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/12921.full-text.aspx
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884798
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapalexeyvgТочнее, поможет специальная самодельная индексация, которую тут обсуждали на форуме.
https://social.technet.microsoft.com/wiki/ru-ru/contents/articles/12921.full-text.aspx О, даже в технет-документацию выложили :-)

Для данного кейса случае даже упрощается, не нужно индексировать слова.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884827
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgО, даже в технет-документацию выложили :-)
Какой-то странноватый кейс - искать по любому месту внутри слова. А по началу слова самый обычный фулл-текст сёрч нормально ищет. Но, вообще-то, по-моему лучше сразу двигать в сторону lucene/ellastic или чего-нибудь подобного.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884830
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatalexeyvgО, даже в технет-документацию выложили :-)
Какой-то странноватый кейс - искать по любому месту внутри слова. А по началу слова самый обычный фулл-текст сёрч нормально ищет.Пользователям это как раз не странно, это более естественно, чем искать по началу слова, и тем более по точному совпадению.
fkthatНо, вообще-то, по-моему лучше сразу двигать в сторону lucene/ellastic или чего-нибудь подобного.От конкретной задачи зависит. Построить индекс на поле будет проще, чем использовать поисковые енжини, и искать будет намного быстрее.
Для некоторых сценариев, например, поиск по номеру документа, или по названию, индекс предпочтительней.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884879
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunterpalladin600,

В поисковиках SQL вообще не используется. Там другая тема.

жесткое заявление.
SQL совсем не используется ни в каких поисковиках в этом мире!
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39884894
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дума, что всё, что мы пытаемся искать уже искали до нас.
И где-то это хранится и проиндексировано.

Соответственно никакого последовательного select тут для быстрых подсказок не нужно
Достаточно более щадящих методов перемещения по отсортированной базе..
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39885009
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palladin600,

инкрементный поиск делают с небольшим ожиданием ввода следующего символа, так экономятся обращения к серверу.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39885023
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183
Дума, что всё, что мы пытаемся искать уже искали до нас.
И где-то это хранится и проиндексировано.

Соответственно никакого последовательного select тут для быстрых подсказок не нужно
Достаточно более щадящих методов перемещения по отсортированной базе ..


что такое "отсортированная база"? и "перемещение" по ней?
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39885122
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты же не предлагаешь делать новый select после каждого изменения поисковой строки?
Есть другие механизмы.
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39885151
Андрей Юниор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Какой-то странноватый кейс - искать по любому месту внутри слова. А по началу слова самый обычный фулл-текст сёрч нормально ищет. Но, вообще-то, по-моему лучше сразу двигать в сторону lucene/ellastic или чего-нибудь подобного.

alexeyvg
Пользователям это как раз не странно, это более естественно, чем искать по началу слова, и тем более по точному совпадению.

В 2016 сервере появился FREETEXT. Если я правильно понял, теперь искать можно не только по началу строки:
https://docs.microsoft.com/ru-ru/sql/t-sql/queries/freetext-transact-sql?view=sql-server-ver15
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39885196
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О бл.. оказывается как это называется
"полнотекстовый поиск по столбцам полнотекстового индекса, содержащим символьные типы данных"
...
Рейтинг: 0 / 0
Для поиска, надо ли делать обращение к БД после каждого введённого символа?
    #39885354
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Юниор
В 2016 сервере появился FREETEXT
В 2008 сервере, 11 лет назад :-)

Андрей Юниор
теперь искать можно не только по началу строки:
Не позволяет. Это обычный полнотекстовый поиск, с морфологией и т.д. Который, цитирую, "выполняет поиск значений, которые соответствуют условию поиска по смыслу, а не написанию".
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Для поиска, надо ли делать обращение к БД после каждого введённого символа?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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