Статьи

Нужен лучший поиск? Используйте простую мощь анализаторов Elasticsearch

Ниже приведена сводная информация по релевантному поиску

Выдержка из соответствующего поиска

В главе 4 « Соответствующий поиск» мы много говорим об анализаторах Elasticsearch. Без анализаторов ваша поисковая система была бы довольно неразумной системой сравнения строк, а не умной, мощной поисковой системой. Анализаторы — это конвейер обработки текста, который питает основные структуры данных поисковой системы, контролируя, совпадают ли два токена (в основном слова) во время поиска.

В этой статье я хочу мотивировать вас на создание ваших собственных анализаторов. Если вы можете освоить анализаторы, вы можете напрямую контролировать кажущийся интеллект внутри Elasticsearch. Здесь нет кода, скорее я хочу, чтобы вы точно поняли, зачем вам нужен собственный анализатор. Это то, что мы делаем почти в каждом поисковом проекте, но многие разработчики боятся их использовать. Давайте более философски рассмотрим, почему анализаторы дают вам огромный, строгий контроль над поведением ранжирования в поисковых системах.

Что такое анализаторы? Зачем они нам нужны?

В основе поисковой системы лежит хорошо настроенная, но довольно тупая структура данных для сопоставления строк. Это настолько требовательно и глупо, что не сможет сказать CATи catто же самое. Для структуры данных внутри поисковой системы эти две строки представляют собой уникальные массивы символов UTF-8, а не варианты одного и того же слова. CAT (\ x43 \ x41 \ x54) и cat (\ x63 \ x61 \ x74) не совпадают, поэтому конец истории: при поиске CATне удается найти документы cat.Полный процесс извлечения и анализа Elasticsearch (взято из главы 2 соответствующего поиска)

Взято из релевантного поиска : как документы преобразуются в токены, проиндексированные в поисковой системе

Не так быстро говорят ваши анализаторы 🙂 Анализаторы превращают строки в нормализованные токены перед поиском / обновлением этой тупой структуры данных. Например, одним из этапов анализа может быть принуждение текста к нижнему регистру. Это преобразует все экземпляры CATв cat, вызывая совпадение двух вариантов, тем самым перекрывая неразумность, присущую фактической структуре данных.

Другие формы анализа более специфичны для языка. Например, stemming используется для преобразования слов в корневую форму. Для английского языка немой структура данных поисковой системы не может сказать , что runningи runта же. Тем не менее, с соответствующим английским stemming, runningможет быть преобразован в run, что позволяет им соответствовать. Другие языки, от немецкого, китайского до исландского, конечно, имеют свои собственные уникальные правила для выполнения таких операций (и даже определения, что составляет слово!).

Анализаторы Ultimate Power!

Ладно, блин, так что просто выбери анализатор для своего языка и продолжай, верно! Не так быстро. Анализаторы на самом деле являются важной контрольной точкой в ​​вашем поисковом решении. Создавая собственные анализаторы, ВЫ решаете, когда два термина эквивалентны и должны совпадать в этой тупой структуре данных. Вы можете преобразовать любой фрагмент текста в что-то, что будет соответствовать. Или идите другим путем — убедитесь, что два фрагмента текста проанализированы, чтобы они точно не совпадали. Оба могут быть допустимыми, в зависимости от приложения.

В качестве примера, скажем, вы создаете поиск для фанатов SciFi и хотите показать им веб-страницы, на которых обсуждаются персонажи, идеи и т. Д. Из их любимой франшизы (Star Trek, Star Wars и т. Д.). Пользователи ищут Star Trek и Star Wars, ожидая возвращения документов, относящихся к их теме. Это вроде как работа. Но супер фанатам не нужно вообще упоминать франшизу в своих дискуссиях. Целые документы в поиске читаются как

Капитан Пикард намного круче Хана Соло. Хан Соло выстрелил первым, конечно, но Пикард отступил от Борга, адмирала Томалака и множества других.

Вы ищете «Звездный путь и Звездные войны», и это нигде не будет найдено!

Ах, но анализ дает вам возможность сделать условия эквивалентными. Одним из способов использования анализатора является подбор набора синонимов, указывающих на связь между выдающимися персонажами и их франшизой. Синонимы — это еще один шаг, который вы можете добавить к процессу анализа. Например, вот наш пример файла синонимов:

Captain Picard => Star Trek
Han Solo => Star Wars
Ned Stark => Game of Thrones

Хорошо, теперь вы создадите собственный анализатор с помощью шага синонима. Теперь, если мы возьмем наше предложение и проведем его через анализ:

Капитан Пикард намного круче Хана Соло.

это будет преобразовано в эти токены

[Звездный путь] [это] [путь] [круче] [чем] [Звездные войны]

и, конечно же, если мы делаем стэминг, нижний регистр и некоторые другие полезные шаги для английского языка, мы могли бы прийти к

[Звездный путь] [это] [путь] [круто] [чем] [звездная война]

Теперь ваш поиск star trekдолжен соответствовать чему-то! Вы можете разыграть намного более широкую сеть сейчас. Более того, поскольку больше имен, идей и т. Д. В документе соответствуют материалам из франшизы Star Trek, показатель релевантности для этих документов будет увеличиваться, поскольку они считаются дополнительными совпадениями star trek! Делая условия эквивалентными, вы контролируете не только их соответствие, но и их рейтинг и оценку!

Этот первый удар тоже был лишь верхушкой айсберга, количество вариантов управления тем, как испускаются токены, бесконечно. Вы можете ввести целую библиотеку фильтров и других шагов в процесс. Вы можете изменить их порядок. Делайте все, что вам нужно, чтобы решить вашу проблему. Поиск не сложен — это просто программирование :).

Например, вы можете решить сохранить исходный текст, изменив способ применения синонимов (здесь | означает, что два маркера разделяют пространство):

[звездный путь | капитан пикард] [это] [путь] [круто] [чем] [звездная война | хан соло]

или отфильтруйте все термины, которые НЕ соответствуют вашему списку (известные как контрольные слова):

[Звездный путь | Капитан Пикард] … [Звездная война | Хан Соло]

Варианты бесконечны! Настоящий вывод — анализаторы, вам не нужно просто выбирать анализатор для языка. Вместо этого вы можете связать воедино разные части, такие как блоки lego для манипулирования текстом. Анализаторы могут быть построены из всех видов различных компонентов, в том числе

  1. символьные фильтры, которые управляют обработкой строки перед ее преобразованием в токены
  2. один токенайзер , управляющий тем, как строка преобразуется в токены
  3. фильтры токенов, которые позволяют вам манипулировать каждым токеном (синонимы и нижний регистр являются фильтрами токенов).

Дело в том, что здесь есть простая сила, которая может улучшить ваши результаты поиска. Вы можете манипулировать анализаторами и получать огромный выигрыш в более качественном и актуальном поиске. Вы можете непосредственно понять, как работает сопоставление, управлять им, манипулировать им точно в соответствии с вашими потребностями. Простая настройка может эффективно решить проблему поиска, оставляя вас в абсолютном контроле.

Лучше текст! Больше, чем текст!

Если вы хотите получить более глубокую практическую оценку этого анализатора, я действительно рекомендую Главу 4 по релевантному поиску . Это, вероятно, одна из лучших глав в книге. Я даже не написал это лично, но я рекомендую его всем, кто начинает поиск и релевантность поиска! И предупреждение о спойлере: одна из самых крутых вещей, которые мы показываем, это то, что вы можете маркировать ДАЛЕЕ БОЛЬШЕ, чем текст. Heck смотрите здесь , я лексему изображения в «маркера», которые на самом деле значение RGB 🙂 поисковых системы являются удивительными!

Удачного поиска и не стесняйтесь связываться с вопросами, проблемами, потребностями в консультациях и тому подобным. Также проверьте Quepid, который мы широко используем, чтобы опробовать эти идеи!