Typesense — это быстрая, устойчивая к опечаткам поисковая система, позволяющая создавать восхитительные возможности поиска.
Альтернатива Algolia с открытым исходным кодом и
Более простая в использовании альтернатива ElasticSearch
Веб-сайт | Документация | Дорожная карта | Slack-сообщество | Темы сообщества | Твиттер
Вот несколько живых демонстраций , которые показывают Typesense в действии на больших наборах данных:
? Если вы предпочитаете смотреть видео:
Не видите функцию в этом списке? Найдите в нашем трекере проблем, если кто-то уже запросил его, и добавьте к нему комментарий, объясняющий ваш вариант использования, или откройте новую проблему, если нет. Мы расставляем приоритеты в нашей дорожной карте, основываясь на отзывах пользователей, поэтому будем рады услышать ваше мнение.
Вот общедоступная дорожная карта Typesense: https://typesense.link/roadmap.
В первом столбце также объясняется, как мы расставляем приоритеты для функций, как вы можете влиять на расстановку приоритетов и частоту наших выпусков.
Мы хотели бы провести сравнение с более крупными наборами данных, если мы сможем найти большие наборы данных в открытом доступе. Если у вас есть какие-либо предложения по открытым структурированным наборам данных, сообщите нам об этом, открыв проблему. Мы также будем рады, если вы сможете поделиться контрольными показателями из своих больших наборов данных. Пожалуйста, пришлите нам PR!
Typesense используется множеством пользователей в разных областях и вертикалях.
В Typesense Cloud мы обслуживаем более 10 МИЛЛИАРДОВ поисковых запросов в месяц. Образы Docker от Typesense были загружены более 12 миллионов раз.
Недавно мы начали документировать, кто его использует, в нашей витрине. Если вы хотите, чтобы вас включили в список, пожалуйста, отредактируйте SHOWCASE.md и отправьте нам PR.
Вы также увидите список логотипов пользователей на домашней странице Typesense Cloud.
Вариант 1. Вы можете загрузить бинарные пакеты, которые мы публикуем для Linux (x86_64 и Arm64) и Mac (x86_64).
Вариант 2. Вы также можете запустить Typesense из нашего официального образа Docker.
Вариант 3. Разверните управляемый кластер с помощью Typesense Cloud:
Вот краткий пример, демонстрирующий, как можно создать коллекцию, индексировать документ и выполнять поиск по нему в Typesense.
Начнем с запуска сервера Typesense через Docker:
docker run -p 8108:8108 -v/tmp/data:/data typesense/typesense:27.1 --data-dir /data --api-key=Hu52dwsas2AdxdE
У нас есть клиенты API на нескольких языках, но в этом примере давайте воспользуемся клиентом Python.
Установите клиент Python для Typesense:
pip install typesense
Теперь мы можем инициализировать клиента и создать коллекцию companies
:
import typesense
client = typesense . Client ({
'api_key' : 'Hu52dwsas2AdxdE' ,
'nodes' : [{
'host' : 'localhost' ,
'port' : '8108' ,
'protocol' : 'http'
}],
'connection_timeout_seconds' : 2
})
create_response = client . collections . create ({
"name" : "companies" ,
"fields" : [
{ "name" : "company_name" , "type" : "string" },
{ "name" : "num_employees" , "type" : "int32" },
{ "name" : "country" , "type" : "string" , "facet" : True }
],
"default_sorting_field" : "num_employees"
})
Теперь давайте добавим документ в только что созданную коллекцию:
document = {
"id" : "124" ,
"company_name" : "Stark Industries" ,
"num_employees" : 5215 ,
"country" : "USA"
}
client . collections [ 'companies' ]. documents . create ( document )
Наконец, давайте найдем документ, который мы только что проиндексировали:
search_parameters = {
'q' : 'stork' ,
'query_by' : 'company_name' ,
'filter_by' : 'num_employees:>100' ,
'sort_by' : 'num_employees:desc'
}
client . collections [ 'companies' ]. documents . search ( search_parameters )
Вы заметили опечатку в тексте запроса? Ничего страшного. Typesense автоматически обрабатывает опечатки!
Пошаговая инструкция доступна на нашем сайте здесь.
Это проведет вас через процесс запуска сервера Typesense, индексации данных на нем и запроса к набору данных.
Вот наша официальная документация по API, доступная на нашем веб-сайте: https://typesense.org/api.
Если вы заметили какие-либо проблемы с документацией или пошаговым руководством, сообщите нам об этом или отправьте нам PR здесь: https://github.com/typesense/typesense-website.
Хотя вы определенно можете использовать CURL для прямого взаимодействия с сервером Typesense, мы предлагаем официальные клиенты API для упрощения использования Typesense на выбранном вами языке. В API-клиенты встроена интеллектуальная стратегия повторных попыток, гарантирующая отказоустойчивость вызовов API, выполняемых через них, особенно при настройке высокой доступности.
Если мы не предлагаем клиент API на вашем языке, вы все равно можете использовать любую популярную клиентскую библиотеку HTTP для прямого доступа к API Typesense.
Вот некоторые клиенты и интеграции, предоставленные сообществом:
Мы приветствуем вклад сообщества в добавление новых официальных клиентских библиотек и интеграций. Пожалуйста, свяжитесь с нами по адресу [email protected] или откройте вопрос на GitHub, чтобы сотрудничать с нами в разработке архитектуры.
У нас также есть следующие интеграции с фреймворками:
У нас есть поддерживаемая сообществом коллекция Postman: https://github.com/typesense/postman.
Postman — это приложение, которое позволяет выполнять HTTP-запросы, указывая и щелкая мышью, вместо того, чтобы вводить их в терминале. Приведенная выше коллекция Postman предоставляет вам шаблонные запросы, которые вы можете импортировать в Postman, чтобы быстро выполнять вызовы API к Typesense.
Вы можете использовать наш адаптер InstantSearch.js для быстрого создания эффективных возможностей поиска с фильтрацией, сортировкой, нумерацией страниц и многим другим.
Вот как: https://typesense.org/docs/guide/search-ui-comComponents.html.
Elasticsearch — это большое программное обеспечение, установка, администрирование, масштабирование и тонкая настройка которого требует нетривиальных усилий. Он предлагает вам несколько тысяч параметров конфигурации, чтобы получить идеальную конфигурацию. Поэтому он лучше подходит для больших команд, у которых есть пропускная способность, чтобы подготовить его к работе, регулярно отслеживать и масштабировать, особенно когда им необходимо хранить миллиарды документов и петабайты данных (например, журналы).
Typesense создан специально для сокращения «времени выхода на рынок» и обеспечения приятного поиска. Это легкая, но мощная и масштабируемая альтернатива, ориентированная на удовлетворение и опыт разработчиков, с чистым, хорошо документированным API, понятной семантикой и умными настройками по умолчанию, поэтому она хорошо работает сразу после установки, без необходимости поворачивать множество ручек. .
Elasticsearch также работает на JVM, настройку которой для оптимальной работы может оказаться весьма непростой задачей. Typesense, с другой стороны, представляет собой один легкий автономный двоичный файл, поэтому его легко настроить и использовать.
См. параллельное сравнение функций здесь.
Algolia — это запатентованный размещенный на хостинге продукт поиска как услуги, который хорошо работает, когда стоимость не является проблемой. По нашему опыту, быстрорастущие сайты и приложения быстро сталкиваются с ограничениями поиска и индексирования, что сопровождается дорогостоящими обновлениями планов по мере их масштабирования.
Typesense, с другой стороны, — это продукт с открытым исходным кодом, который вы можете запускать в своей собственной инфраструктуре или использовать наше управляемое предложение SaaS — Typesense Cloud. Версию с открытым исходным кодом можно использовать бесплатно (кроме, конечно, ваших собственных затрат на инфраструктуру). С Typesense Cloud мы не взимаем плату за записи или операции поиска. Вместо этого вы получаете выделенный кластер и можете передавать в него столько данных и трафика, сколько он может обработать. Вы платите только фиксированную почасовую стоимость и плату за пропускную способность, в зависимости от выбранной вами конфигурации, как и на большинстве современных облачных платформ.
С точки зрения продукта Typesense по духу ближе к Algolia, чем к Elasticsearch. Однако мы устранили некоторые важные ограничения Algolia:
Algolia требует отдельных индексов для каждого порядка сортировки, что учитывается при определении ограничений вашего плана. Большинство настроек индекса, такие как поля для поиска, поля для фасета, поля для группировки, настройки ранжирования и т. д., определяются заранее при создании индекса, а не могут быть установлены на лету во время запроса.
С помощью Typesense эти параметры можно настроить во время поиска с помощью параметров запроса, что делает его очень гибким и открывает новые варианты использования. Typesense также может предоставлять вам отсортированные результаты с помощью одного индекса вместо необходимости создавать несколько. Это помогает снизить потребление памяти.
Algolia предлагает следующие функции, которых в настоящее время нет в Typesense: персонализация и серверная поисковая аналитика. Что касается аналитики, вы по-прежнему можете инструментировать свой поиск на стороне клиента и отправлять показатели поиска в выбранный вами инструмент веб-аналитики.
Мы намерены устранить этот пробел в Typesense, а пока, пожалуйста, дайте нам знать, если что-то из этого мешает вашему варианту использования, создав запрос на функцию в нашем трекере проблем.
См. параллельное сравнение функций здесь.
Свежий сервер Typesense будет потреблять около 30 МБ памяти. Когда вы начнете индексировать документы, использование памяти соответственно увеличится. Насколько оно увеличится, зависит от количества и типа индексируемых полей.
Мы стремились сохранить компактность структур данных в памяти. Чтобы дать вам примерное представление: когда 1 миллион заголовков Hacker News индексируется вместе с их баллами, Typesense потребляет 165 МБ памяти. Тот же размер этих данных на диске в формате JSON составляет 88 МБ. Если у вас есть какие-либо цифры из ваших собственных наборов данных, которые мы можем добавить в этот раздел, пришлите нам PR!
По нашему опыту, компании обычно обеспокоены тем, когда библиотеки, которые они используют, имеют лицензию GPL, поскольку код библиотеки напрямую интегрирован в их код и приведет к созданию производных работ и обеспечению соответствия GPL. Однако Typesense Server — это серверное программное обеспечение , и мы ожидаем, что пользователи обычно будут запускать его как отдельный демон, а не интегрировать со своим собственным кодом. GPL щедро охватывает и разрешает этот вариант использования (например, Linux имеет лицензию GPL) . Итак, AGPL — это то, что делает серверное программное обеспечение, доступ к которому осуществляется по сети, результатом производной работы, а не GPL. По этой причине мы решили не использовать AGPL для Typesense.
Теперь, если кто-то вносит изменения в сервер Typesense, GPL фактически позволяет вам сохранять эти изменения при себе до тех пор, пока вы не распространяете измененный код. Таким образом, компания может, например, модифицировать сервер Typesense и запускать модифицированный код внутри себя, и при этом ей не придется открывать исходный код своих модификаций, если они сделают измененный код доступным для всех, кто имеет доступ к модифицированному программному обеспечению.
Теперь, если кто-то вносит изменения в сервер Typesense и распространяет эти изменения, вступает в силу лицензия GPL. Учитывая, что мы опубликовали нашу работу для сообщества, мы хотели бы, чтобы изменения других также были открыты для сообщества в дух открытого исходного кода. Для этой цели мы используем GPL. Другие лицензии позволят модифицировать нашу работу с открытым исходным кодом, сделать ее закрытой и распространять, чего мы хотим избежать с помощью Typesense ради долгосрочной устойчивости проекта.
Вот дополнительная информация о том, почему GPL, как описано в Discourse: https://meta.discourse.org/t/why-gnu-license/2531. Многие из упомянутых там моментов резонируют с нами.
Теперь все вышеперечисленное применимо только к Typesense Server. Наши клиентские библиотеки действительно предназначены для интеграции в код наших пользователей, поэтому они используют лицензию Apache.
Подводя итог, можно сказать, что AGPL — это то, что обычно проблематично для серверного программного обеспечения, и мы решили не использовать его. Мы считаем, что GPL для Typesense Server отражает суть того, чего мы хотим от этого проекта с открытым исходным кодом. GPL имеет долгую историю успешного использования популярными проектами с открытым исходным кодом. Наши библиотеки по-прежнему имеют лицензию Apache.
Если у вас есть особенности, которые не позволяют вам использовать Typesense из-за проблем с лицензией, мы будем рады изучить эту тему вместе с вами. Пожалуйста, свяжитесь с нами.
Если у вас есть общие вопросы о Typesense, вы хотите поздороваться или просто следить за нами, мы приглашаем вас присоединиться к нашему общедоступному сообществу Slack.
Если у вас возникнут какие-либо проблемы или проблемы, создайте проблему на GitHub, и мы постараемся помочь.
Мы стремимся обеспечить хорошую поддержку через наши системы отслеживания проблем на GitHub. Однако, если вы хотите получить частную и приоритетную поддержку:
Мы предлагаем варианты платной поддержки, описанные здесь.
Мы — сплоченная команда, миссия которой — демократизировать поиск, и мы примем всю возможную помощь! Если вы хотите принять участие, вот информация о том, где нам может пригодиться ваша помощь: Contributing.md
Если вы хотите получать обновления, когда мы выпускаем новые версии, нажмите кнопку «Смотреть» вверху и выберите «Только выпуски». GitHub будет отправлять вам уведомления вместе с журналом изменений для каждого нового выпуска.
Мы также публикуем в нашей учетной записи Twitter обновления о выпусках и дополнительных темах, связанных с Typesense. Следуйте за нами здесь: @typesense.
Мы также будем публиковать обновления в нашем сообществе Slack.
Мы используем Bazel для создания Typesense.
Typesense требует следующих зависимостей:
Пожалуйста, обратитесь к шагам сборки CI для получения последнего набора зависимостей.
После их установки запустите из корня репозитория следующее:
bazel build //:typesense-server
Первая сборка займет некоторое время, поскольку в процессе сборки извлекаются и собираются другие сторонние библиотеки.
© Typesense Inc., 2016 г. по настоящее время.