Как да създадете мащабируема търсачка за приложение на Python с Manticore

Intro:
Има много отлично търсене инструментите налични, но понякога имате нужда от нещо малко по-адаптивно. В този урок за Python научете как да добавите Manticore като персонализирана търсачка за вашето приложение.
Какво е Мантикора?
Manticore е индексиран инструмент за пълнотекстово търсене с отворен код. Той е оптимизиран за скорост и се предлага пълен с функции за персонализиране и лесна употреба. Можете да го настроите и внедрите на всяка операционна система или облачна платформа само за секунди – не е необходима допълнителна конфигурация. Освен това работи с всеки език за програмиране, който поддържа JSON и PHP. Например, ако използвате Python и Django, интегрирането е лесно благодарение на библиотеката manticore_django, създадена специално за вашите нужди.
Можете да настроите и стартирате Manticore само за няколко секунди, без да е необходима допълнителна конфигурация, на всяка платформа или облак. Той поддържа множество езици за програмиране като PHP, Perl и Python и работи с най-разпространените бази данни като MySQL, PostgreSQL и MongoDB.
Като проект с отворен код, който е напълно безплатен за използване, вие наистина можете да приспособите своето внедряване на Manticore, за да отговаря точно на вашите нужди. В този урок ще разгледаме как да създадем търсачка за приложение на Python с помощта на Django – но трябва да се чувствате свободни да следвате, ако работите с друга рамка или език по ваш избор. Например, тази публикация показва как да го интегрирате в екосистемата на Flask.
Какво ще ти трябва
За да следвате този урок, ще ви трябва следното:
Python 3.5 и по-нови, инсталирани на вашата машина (заедно с pip) – проверете дали използва python –version. Ако е необходимо, инсталирайте Python тук.
(По избор) IDE или редактор на код по ваш избор. Препоръчвам Visual Studio Code, но всеки друг редактор на код трябва да работи също толкова добре. За повече препоръки вижте статията ми „Най-добрите редактори на код за Linux, Mac и Windows“. Като алтернатива можете да използвате среда за разработка, базирана на браузър, като Thonny Debugger вградена в браузъра IDE, за да експериментирате интерактивно с Python. Обикновено обаче за учебни цели използването на IDE и редактори е по-добро.
Manticore е инсталиран на вашата машина. Можете да намерите инструкции за инсталиране тук и можете да тествате дали работи, като стартирате manticore -e „търсене“ . Ако тази команда не върне никаква грешка, тогава Manticore работи правилно на вашата машина.
Локална или отдалечена MySQL база данни (ако използвате отдалечена, уверете се, че сте настроили правилно параметрите на връзката). За още информация относно настройването на MySQL вижте „Как да инсталирате локален MySQL сървър на Ubuntu 18“. Отново се уверете, че сте активирали флага sql_mode в /etc/mysql/my.cnf, ако работите със SQL заявки в строг режим. Уверете се също така, че имате потребителски акаунт с достъп за създаване на таблици и вмъкване на данни в тази база данни.
И накрая, ще ви е необходим Django проект (или друг проект), готов на вашата машина. Ако все още нямате такъв, изпълнете следните стъпки:
Изтеглете най-новата версия на Django от официалния уебсайт. Разархивирайте го с помощта на unzip например, след това cd в неговата директория. За да започнете нов проект, използвайте django-admin startproject my_project, където my_project е името на вашата директория на проекта. Сега във вашата основна папка стартирайте python manage.py runserver 0.0.0.0:8000, който ще стартира локален сървър на порт 8000 на тази машина на всички интерфейси. Вече имате достъп до него във вашия браузър, като посетите localhost:8000.
Как работи
Когато използвате Manticore, нямате нужда от специални инструменти или библиотеки за индексиране. Търсенето се извършва чрез проста HTTP GET заявка, която връща JSON резултати. Това означава, че можете лесно да го използвате във връзка с други рамки, като Django и Flask (както беше споменато по-горе), или като част от крайна точка във вашата архитектура на микросервизи. Имайте предвид, че Manticore е проектиран да поддържа всеки език за програмиране – не само Python – така че стъпките, които предприемаме тук, се прилагат еднакво добре и за други езици. Ние обаче ще обясним нещата конкретно по отношение на екосистемата на Python и разработката на приложения на Django, защото те са относително лесни за следване.
За да разберете как работи, трябва да разберете само две концепции:
Анализаторът на заявки, който разбива низа на заявката на токени; и анализатора, който групира тези токени в обърнат индекс за бързо търсене.
Нека започнем, като разгледаме кои части от системата участват в осъществяването на търсенията:
В тази статия се фокусираме основно върху използването на Manticore като демон с неговия уеб интерфейс, изложен чрез HTTP (фигурата по-горе). Въпреки това, ако искате повече информация относно използването на Manticore във вашия собствен код, тогава погледнете тази страница. Има и списък с езикови обвързвания.
Да напишете сами анализатор на заявки не е лесно!
Едно от предизвикателствата при използването на Manticore директно от вашия код или от REPL на Python (или всеки друг език) е да пишете правилно структурирани заявки. Това изисква да знаете за писането на парсери, което може да бъде малко непосилно за начинаещи в програмирането, но не непременно за нашите цели тук: ще се придържаме към два основни типа заявки: прости търсения по ключови думи и точни съвпадения по фраза. За тази цел нека да разгледаме примерна заявка и да видим как трябва да бъде форматирана, преди да преминем към създаването на самия анализатор. За този раздел ще използваме HTTP заявки чрез cURL:
Ако искате повече информация за cURL, погледнете това ръководство.
Първо извлечете низа на заявката от заявката, което се прави чрез писане на код, подобен на този:
След това трябва да го разделите на токени, което може да се постигне с нещо подобно:
Добавянето на кавички и интервали като поддържани типове токени добавя поддръжка и за точни съвпадения на фрази (вижте Глава 3 от ръководството „ Търсене на пълен текст на PDF и HTML в Manticore ” за повече подробности). Остава въпросът как да проверите дали токенът е точно съвпадение по фраза или не. Това може да стане, като проверите разстоянието му от други токени във вашия речник. Например, да кажем, че имаме много прост речник, състоящ се само от две думи (a и b):
Сега можете да проверите дали токенът е точно съвпадение по фраза, като измерите разстоянието му от всички други токени в индекса. Ако е по-голямо от 1, тогава знаем, че не е съвпадение по фраза:
В тази статия ние сами ще внедрим поддръжка за точни съвпадения по фраза. Въпреки това силно ви препоръчвам да използвате вградената поддръжка на Manticore за това вместо това, както е описано в глава 7 от ръководството „ Търсене на пълен текст на PDF и HTML в Manticore “. Ще научите също как да конфигурирате своя анализатор, за да постигнете конкретни резултати, като премахване на спиращи думи и произволни думи – които са важни техники за оптимизация при изграждане на търсачки. Можем да започнем с дефиниране на кода за изграждане на анализатор на заявки, както следва:
Ще забележите, че използвах името на класа QueryParser вместо Tokenizer, защото това всъщност анализира текста в токени (с помощта на нашия речник) и след това изгражда заявката за търсене. Нека да преминем през всеки метод на свой ред, като започнем с tokenize() :
Токените могат да бъдат изградени от нашия речник или от отделни знаци с помощта на функцията get_token. Последното е полезно за точни съвпадения по фраза, които ще разгледаме сега. Ако искате повече информация за това как да внедрите различни типове заявки, като например съвпадение на префикс, погледнете Глава 4 от ръководството „ Търсене на пълен текст на PDF и HTML в Manticore “. Засега нека разгледаме точните съвпадения по фраза:
В този случай ние използваме прост регулярен израз, за да съпоставим жетоните, от които се нуждаем, и след това или да ги заменим със себе си, или да добавим кавички в зависимост от това дали имат празно пространство около тях. С други думи, той замества ключовите думи с една дума със себе си (напр. „котка“), но добавя кавички около точни съвпадения по фраза, които включват интервали (напр. „котка в шапката“). Това е изключително опростена реализация на това, което ще бъде много важна оптимизация в търсачките с пълен текст и горещо ви препоръчвам да прочетете повече за това, както и да внедрите подходящи анализатори на заявки за вашите собствени нужди, преди да продължите!
Вече можете отново да започнете да пишете заявки към вашия индекс:
И трябва да видите резултатите, които очаквате! Добра работа!
Следващи стъпки
Следващата стъпка ще бъде да създадете търсене API. Можете да постигнете това, като използвате една от многото популярни рамки, като Django, Flask или Rails. Това е съвсем отделна тема, така че следете за още статии по нея в бъдеще! Вижте другите ми публикации, за да научите как да правите търсене в пълен текст с Elasticsearch и Manticore. Разгледайте и нашата нова готварска книга, която показва примери за употреба за реални случаи на употреба. Ако имате някакви мисли или предложения – уведомете ни в коментарите по-долу! Ако искате да разговаряте за пълнотекстово търсене – присъединете се към нашия канал за чат в Gitter. И накрая, не забравяйте да ни следвате в Twitter на twitter.com/manticoresearch и във Facebook на facebook.com/manticoresearch