{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Блог Михаила Озорнина: заметки с тегом поиск",
    "_rss_description": "Главная · Блог · Работы ·",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/mikeozornin.ru\/blog\/tags\/poisk\/",
    "feed_url": "https:\/\/mikeozornin.ru\/blog\/tags\/poisk\/json\/",
    "icon": "https:\/\/mikeozornin.ru\/blog\/user\/userpic@2x.jpg?1614204384",
    "author": {
        "name": "Михаил Озорнин",
        "url": "https:\/\/mikeozornin.ru\/blog\/",
        "avatar": "https:\/\/mikeozornin.ru\/blog\/user\/userpic@2x.jpg?1614204384"
    },
    "items": [
        {
            "id": "143",
            "url": "https:\/\/mikeozornin.ru\/blog\/all\/search-ui-tricks\/",
            "title": "На что обратить внимание, когда делаешь поиск",
            "content_html": "<p>Недавно я сделал поиск в <a href=\"http:\/\/mikeozornin.ru\/blog\/all\/vino-iz-parfenona\/\">Винах Парфенона<\/a>. Пока делал его, пришлось запрограммировать некоторые мелочи. Их часто пропускают, поэтому решил вот написать.<\/p>\n<p><aside class=\"aside-margin-right\"><a href=\"https:\/\/twitter.com\/mikeozornin\/status\/1252159976967213061\">twitter.com\/mikeozornin\/status\/1252159976967213061<\/a><br\/>Исходный твитер-тред<\/aside><\/p>\n<p>Изначально это был твиттер-тред, для удобства я перенес в пост.<\/p>\n<h3>1. Регистронезависимый поиск<\/h3>\n<p>Поиск почти всегда лучше сделать регистронезависимым. Нет ничего более неудобного, чем регистрозависимый поиск. Если кому-то нужна регистрозависимость — лучше сделать опцией.<\/p>\n<h3>2. Искать с первого символа<\/h3>\n<p>Ограничения «искать с третьего символа» обычно причиняют немало неудобств, лучше искать сразу.<\/p>\n<h3>3. Искать по всем полям сразу<\/h3>\n<p>Обычно нужно искать нужно в большом числе полей сразу, а не устраивать «Поиск по названию», «Поиск по винограду» и т. д.<\/p>\n<p>Например, можно искать сразу по всем отображаемым полям.<\/p>\n<h3>4. Делать trim<\/h3>\n<p>Почти всем данным при вводе, поисковому запросу в том числе, нужно делать trim — убирать все пробельные символы с концов строки (внутри нельзя).<\/p>\n<h3>5, 6 и 7. Как делить поисковый запрос на токены<\/h3>\n<p>Запрос делится по пробельным символам на части, каждая часть ищется независимо. Чтобы искать словосочетание, нужно взять его в кавычки.<\/p>\n<div class=\"e2-text-table\">\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n<tr>\n<td><b>Запрос<\/b><\/td>\n<td><b>Что должно найтись<\/b><\/td>\n<\/tr>\n<tr>\n<td>Pinot toscana<\/td>\n<td>Хотя бы одно поле содержит «Pinot»<br\/>И<br\/>Хотя бы одно поле содержит «toscana»<\/td>\n<\/tr>\n<tr>\n<td>’’Pinot toscana’’<\/td>\n<td>Хотя бы одно поле содержит «Pinot toscana»<\/td>\n<\/tr>\n<tr>\n<td>красное ’’Pinot toscana’’<\/td>\n<td>Хотя бы одно поле содержит «красное»<br\/>И<br\/>Хотя бы одно поле содержит «Pinot toscana»<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<h3>8, 9 и 10.  Диакритические знаки<\/h3>\n<p>Нужно учитывать диакритические знаки, искать и с ними, и без них.<\/p>\n<p>Châteauneuf-du-Pape должен находиться по запросам:<br \/>\nChâteauneuf-du-Pape<br \/>\nChateauneuf-du-Pape<\/p>\n<p>Это важно потому, что не все помнят как правильно. Кто-то может забыть сам, а кто-то скопирует текст там, где не знали как правильно. Например, Château очень часто пишут без Accent circonflexe (Chateau).<\/p>\n<p><aside class=\"aside-margin-right\">Меня исправили и предложили более правильный способ: через нормализацию нужно прогонять как строку, в которой ищут, так и поисковый запрос. Тогда никаких сложностей не будет.<\/aside><\/p>\n<p>Нельзя просто сделать замену диакритических знаков на обычные. Должно найтись и так, и так. Человек, который пишет правильно, страдать не должен.<\/p>\n<p>Не делайте замену символов руками (â → a, á → a, à → a, å → a и т. д.), вы задолбаетесь и что-то пропустите. В вашем языке программирования, скорее всего, есть функция нормализации. Например, вот в джаваскрипте:<br \/>\n<a href=\"https:\/\/developer.mozilla.org\/ru\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/String\/normalize\">developer.mozilla.org\/ru\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/String\/normalize<\/a><\/p>\n<p>Я использовал вот такой код для нормализации (откуда-то скопипастил)<\/p>\n<pre>\r\nvalue.normalize(’NFKD’).replace(\/[^\\w\\s.-_\\\/]\/g, ’’).toLocaleLowerCase();\r\n<\/pre>\n<h3>Посмотреть в жизни<\/h3>\n<p>Попробуйте все описанное выше в <a href=\"http:\/\/mikeozornin.ru\/blog\/all\/vino-iz-parfenona\/\">Винах Парфенона<\/a>.<\/p>\n<h3>Что я забыл?<\/h3>\n",
            "date_published": "2020-04-21T22:55:55+03:00",
            "date_modified": "2025-03-03T22:18:43+03:00",
            "_date_published_rfc2822": "Tue, 21 Apr 2020 22:55:55 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "143",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        }
    ],
    "_e2_version": 3798,
    "_e2_ua_string": "E2 (v3798; Aegea)"
}