Locasticsearch
Полный поиск без сервера в Python
️ Дерьезный статус :? ?
Locasticsearch предоставляет полное текстовое поиск без сервера, работающий на полном текстовом поиске SQLite, но пытается совместима с (подмножеством) API Elasticsearch.
Таким образом, вы можете комфортно разработать приложение Text Search без необходимости настройки услуг и плавно переходить на Elasticsearch для масштаба или более функций без изменения вашего кода.
Тем не менее, если вы выполняете только базовые поисковые операции в подмножестве, поддерживаемом этой библиотекой, и у вас нет много документов (~ миллион), которые бы оправдывали использование кластера, Locasticsearch может быть более быстрой альтернативой Elasticsearch.
Начиная
from locasticsearch import Locasticsearch
from datetime import datetime
es = Locasticsearch()
doc = {
"author": "kimchy",
"text": "Elasticsearch: cool. bonsai cool.",
"timestamp": datetime(2010, 10, 10, 10, 10, 10),
}
res = es.index(index="test-index", doc_type="tweet", id=1, body=doc)
res = es.get(index="test-index", doc_type="tweet", id=1)
print(res["_source"])
# this will get ignored in Locasticsearch
es.indices.refresh(index="test-index")
res = es.search(index="test-index", body={"query": {"match_all": {}}})
print("Got %d Hits:" % res["hits"]["total"]["value"])
for hit in res["hits"]["hits"]:
print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])
Мы также добавляем упрощенный API, который может быть преобразован в Elasticsearch.
Функции
- ?% Local, нет управления сервером
- Легкий чистый питон, нет внешних зависимостей
- ⚡ Супер быстрые поиски благодаря возможностям полного текстового поиска SQLite
- ? Нет блокировки. Благодаря совместимости API с официальным клиентом вы можете плавно переходить на Elasticsearch для масштаба или более функций, не изменяя свой код.
Установить
pip install locasticsearch
Использовать или не использовать
Вы не должны использовать LocasticSearch, если:
- Вы развертываете приложение для чувствительного к безопасности. Код Locasticsearch очень подвержен атакам инъекций SQL. Это должно улучшиться в будущих выпусках.
- Ваши поиски сложнее, чем то, что вы найдете в учебном пособии Elasticsearch 5 минут. Elasticsearch имеет огромный API, и очень маловероятно, что мы можем поддержать даже значительную часть этого.
- Вы ненавидите библиотеки багги. Locasticsearch - очень молодой проект, поэтому ошибки гарантированы. Вы можете проверить тесты, чтобы увидеть, покрываются ли ваши потребности.
Вы должны использовать Locasticsearch, если:
- Вы не хотите, чтобы Docker или Elasticsearch Service с использованием драгоценных ресурсов в вашем ноутбуке
- Вам нужен только базовый текстовый поиск и Elasticsearch
- Вам нужны очень простые развертывания, которые только включают установки PIP
- Использование Java из программы Python заставляет вас чувствовать себя грязно
Следующие шаги
Сравнение с подобными библиотеками
Некоторые быстрые мысли о существующих инструментах, не стесняйтесь добавлять/прокомментировать:
whoosh
Самая полная библиотека поиска текста Pure Python на сегодняшний день:
- ? Поддерживает выделение, анализаторы, расширение запросов, несколько функций ранжирования, ...
- ? Несмотря на долгое время, хотя может увидеть возрождение по адресу https://github.com/whoosh-community/whoosh
- ? Pure Python, так что не масштабируется (все еще достаточно быстро для небольших/средних наборов данных)
Elasticsearch
Большой чемпион полного текстового поиска. Это то, что вы должны использовать в производстве:
- ? Много функций, чтобы приспособить любой вариант использования
- ? Боевые испытания, масштабируемые, исполнительные
- ? НЕПОЛИНСКИЙ НАПИСКИ: более сложный для развертывания/интеграции с Python Project для простых вариантов использования
Тантив
Это хорошая рекомендация для локального полного текстового поиска, если вы не заботитесь о совместимости API Elastic Search API
- ? Простой для настройки и использования:
pip install tantivy - ? Быстрый двигатель на основе ржавчины
- ? DSL/Library Lock In, без эластичного поиска API
пирорини
Хотя не чистый питон, Pyserini - хороший компромисс, если вы хотите чего -то локального и масштабируемого:
- ? Acess to Lucene из Python (Via Pyjnius Java Bridge)
- ? Без сервера / локальное развертывание
- ? DSL/Library Lock In
- ? Дополнительное время выполнения Java
Джанго Хейстек
Django Haystack предоставляет унифицированный API, который позволяет вам подключать различные бэкэнды поиска (например, Solr, Elasticsearch, Whoosh, Xapian и т. Д.), Не необходимым модифицировать свой код:
- ? Многие функции, повышение, выделение, автозаполнение (хотя некоторые зависимым от бэкэнд)
- ? Возможность переключения бэкэндов
- ? DSL/Library Lock In
- ? Несмотря на поддержку нескольких бэкэндов, Whoosh - единственный, кто является уроженцем Python.
Xapian
- ? Очень быстро и полное (C ++)
- ? Нет PIP -установки (необходимо компиляция на уровне системного уровня)
- ? Привязки Python и документация не так удобны для пользователя
Генсим
В то время как Генсим фокусируется на моделировании тем, вы можете использовать TfidfModel и SparseMatrixSimilarity для поиска текста. Тем не менее, это не использует инвертированный индекс (линейный поиск), поэтому он имеет ограниченную масштабируемость.
- ? Уникальные функции, такие как приблизительный поиск
- ? Основное внимание уделяется моделированию тем, поэтому нет интуитивных API для полного проглатывания текста/поиска
- ? Не поддерживает инвертированные индексы (в основном полный сканирование и приблизительный)
писатель
Peewee на самом деле более общий ORM, но предлагает абстракции для использования полного текстового поиска на SQLite:
- ? Поддержка полного текстового поиска с использованием нескольких Backends SQL (хотя elasticsearch), хотя)
- ? Пользовательские функции рейтинга и анализатора
- ? Нет совместимого API Elasticsearch