На что обратить внимание, когда делаешь поиск
Недавно я сделал поиск в Винах Парфенона. Пока делал его, пришлось запрограммировать некоторые мелочи. Их часто пропускают, поэтому решил вот написать.
Изначально это был твиттер-тред, для удобства я перенес в пост.
1. Регистронезависимый поиск
Поиск почти всегда лучше сделать регистронезависимым. Нет ничего более неудобного, чем регистрозависимый поиск. Если кому-то нужна регистрозависимость — лучше сделать опцией.
2. Искать с первого символа
Ограничения «искать с третьего символа» обычно причиняют немало неудобств, лучше искать сразу.
3. Искать по всем полям сразу
Обычно нужно искать нужно в большом числе полей сразу, а не устраивать «Поиск по названию», «Поиск по винограду» и т. д.
Например, можно искать сразу по всем отображаемым полям.
4. Делать trim
Почти всем данным при вводе, поисковому запросу в том числе, нужно делать trim — убирать все пробельные символы с концом строки (внутри нельзя).
5, 6 и 7. Как делить поисковый запрос на токены
Запрос делится по пробельным символам на части, каждая часть ищется независимо. Чтобы искать словосочетание, нужно взять его в кавычки.
Запрос | Что должно найтись |
Pinot toscana | Хотя бы одно поле содержит «Pinot» И Хотя бы одно поле содержит «toscana» |
’’Pinot toscan’’ | Хотя бы одно поле содержит «Pinot toscana» |
красное ’’Pinot toscana’’ | Хотя бы одно поле содержит «красное» И Хотя бы одно поле содержит «Pinot toscana» |
8, 9 и 10. Диакритические знаки
Нужно учитывать диакритические знаки, искать и с ними, и без них.
Châteauneuf-du-Pape должен находиться по запросам:
Châteauneuf-du-Pape
Chateauneuf-du-Pape
Это важно потому, что не все помнят как правильно. Кто-то может забыть сам, а кто-то скопирует текст там, где не знали как правильно. Например, Château очень часто пишут без Accent circonflexe (Chateau).
Нельзя просто сделать замену диакритических знаков на обычные. Должно найтись и так, и так. Человек, который пишет правильно, страдать не должен.
Не делайте замену символов руками (â → a, á → a, à → a, å → a и т. д.), вы задолбаетесь и что-то пропустите. В вашем языке программирования, скорее всего, есть функция нормализации. Например, вот в джаваскрипте:
developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
Я использовал вот такой код для нормализации (откуда-то скопипастил)
value.normalize(’NFKD’).replace(/[^\w\s.-_\/]/g, ’’).toLocaleLowerCase();
Посмотреть в жизни
Попробуйте все описанное выше в Винах Парфенона.
Полезно. Не знал об нормализации. Спасибо!