Cumu Custruì Un Motore di Ricerca Scalabile Per Una Applicazione Python cù Manticore

Intro:
Ci sò assai di ricerca eccellente attrezzi dispunibule, ma qualchì volta avete bisognu di qualcosa un pocu più persunalizabile. In questu tutoriale di Python, amparate cumu aghjunghje Manticore cum'è un mutore di ricerca persunalizatu per a vostra app.
Cosa hè Manticore?
Manticore hè un strumentu di ricerca di testu pienu indiciatu open source. Hè stata ottimizzata per a rapidità è vene riccu cù funzioni per persunalizazione è facilità d'utilizazione. Pudete cunfigurà è implementà in qualsiasi sistema operatore o piattaforma cloud in solu sicondi - ùn hè micca necessariu cunfigurazione supplementaria. Inoltre, funziona cù qualsiasi lingua di prugrammazione chì sustene JSON è PHP. Per esempiu, sè vo aduprate Python è Django, l'integrazione hè simplice grazia à a biblioteca manticore_django cuncepita apposta per i vostri bisogni.
Pudete cunfigurà è eseguisce Manticore in solu uni pochi di seconde, senza cunfigurazione addiziale necessaria, nantu à qualsiasi piattaforma o nuvola. Supporta parechje lingue di prugrammazione cum'è PHP, Perl è Python è travaglia cù e basa di dati più cumuni cum'è MySQL, PostgreSQL è MongoDB.
Cum'è un prughjettu open source chì hè cumplettamente liberu d'utilizà, pudete veramente adattà a vostra implementazione Manticore per risponde à i vostri bisogni precisi. In questu tutoriale, andemu per cumu custruisce un mutore di ricerca per una app Python utilizendu Django - ma duvete sentu liberu di seguità se travagliate cù un altru quadru o lingua di a vostra scelta. Per esempiu, questu post mostra cumu integrallu in l'ecosistema Flask.
Chì ne avrai bisognu
Per seguità cù stu tutoriale, avete bisognu di i seguenti:
Python 3.5 è installatu nantu à a vostra macchina (inseme cù pip ) - verificate s'ellu usa python -versione . Se necessariu, installate Python quì.
(Opcional) Un editore IDE o codice di a vostra scelta. I ricumandemu Visual Studio Code, ma qualsiasi altru editore di codice duveria travaglià cusì bè. Per più cunsiglii, vede u mo articulu "I migliori editori di codice per Linux, Mac è Windows". In alternativa, pudete aduprà un ambiente di sviluppu basatu in u navigatore cum'è Thonny Debugger in-browser IDE per sperimentà cù Python in modu interattivu. Di genere per scopi di apprendimentu, però, l'usu di IDE è editori sò megliu.
Manticore installatu nantu à a vostra macchina. Pudete truvà l'istruzzioni per a stallazione quì, è pudete pruvà chì hè travagliatu cù manticore -e "search" . Se questu cumanda ùn torna micca errore, allora Manticore hè stallatu è funziona bè in a vostra macchina.
Una basa di dati MySQL locale o remota (se aduprate una basa di dati remota, assicuratevi di avè stabilitu i paràmetri di cunnessione bè). Per più nantu à u corsu circa l'installazione di MySQL verificate "Cumu installà un servitore MySQL locale nantu à Ubuntu 18". In novu, assicuratevi di attivà a bandiera sql_mode in /etc/mysql/my.cnf se travagliate cù dumande SQL in modu strettu. Assicuratevi ancu di avè un contu d'utilizatore cù accessu per creà tavule è inserisce dati in quella basa di dati.
Infine, avete bisognu di un prughjettu Django (o qualsiasi altru prughjettu) prontu nantu à a vostra macchina. Se ùn avete micca unu, seguitate sti passi:
Scaricate l'ultima versione di Django da u situ ufficiale. Unzip it use unzip per esempiu poi cd in u so cartulare. Per inizià un novu prughjettu, utilizate django-admin startproject my_project , induve my_project hè u nome di u vostru cartulare di prughjettu. Avà in u vostru cartulare principale eseguite python manage.py runserver 0.0.0.0:8000 , chì lanciarà un servitore lucale à u portu 8000 di sta macchina in tutte l'interfaccia. Pudete avà accede à questu in u vostru navigatore visitendu localhost:8000.
How It Mis
Quandu si usa Manticore, ùn avete micca bisognu di strumenti speciali o biblioteche per l'indexazione. A ricerca hè realizata via una semplice dumanda HTTP GET chì torna risultati JSON. Questu significa chì pudete facilmente usà in cunghjunzione cù altri frameworks cum'è Django è Flask (cum'è citatu prima), o cum'è parte di un endpoint in a vostra architettura di microserviziu. Nota chì Manticore hè statu cuncepitu per sustene qualsiasi lingua di prugrammazione - micca solu Python - cusì i passi chì facemu quì s'applicanu ugualmente bè à altre lingue. Tuttavia, andemu à spiegà e cose specificamente in quantu à l'ecosistema Python è u sviluppu di l'applicazioni Django perchè sò relativamente faciuli di seguità.
Per capisce cumu funziona, avete bisognu di capiscenu solu dui cuncetti:
U Query Parser chì rompe a stringa di query in tokens; è L'Analyzer chì raggruppa quelli tokens in un indice invertitu per a ricerca rapida.
Cuminciamu per fighjà quali pezzi di u sistema sò implicati in a ricerca di e ricerche:
In questu articulu ci focalizemu principarmenti nantu à l'usu di Manticore cum'è un demoniu cù a so interfaccia web esposta via HTTP (a figura sopra). Tuttavia, sè vo vulete più infurmazione nantu à l'usu di Manticore in u vostru propiu codice, fate un ochju à sta pagina. Ci hè ancu una lista di ligami di lingua.
Scrivite un Parser di Query stessu ùn hè micca faciule!
Una di e sfide cù l'usu di Manticore direttamente da u vostru còdice o da l'internu REPL di Python (o qualsiasi altra lingua) hè di scrive dumande strutturate currettamente. Questu ci vole chì sapete di scrive parsers, chì pò esse un pocu sopraffattu per i principianti in a prugrammazione, ma micca necessariamente per i nostri scopi quì: andemu à attaccà à dui tipi basi di dumande: ricerche di keyword simplici è frasi esatti. Per quessa, fighjemu un ochju à una dumanda di esempiu è vede cumu si deve esse furmatu, prima di passà per creà l'analizzatore stessu. Per sta sezione, avemu da aduprà richieste HTTP via cURL:
Se vulete più infurmazione nantu à cURL, fate un ochju à sta guida.
Prima, estrae a stringa di dumanda da a dumanda, chì hè fatta scrivendu qualchì codice simile à questu:
Allora avete bisognu di rompe in tokens, chì pò esse ottenutu cù qualcosa cum'è questu:
L'aggiunta di Quotes è Spazi cum'è Tipi di Token Supportati aghjunghjenu supportu per i partiti di frasi esatti (vede u Capitulu 3 di a guida "Ricerca Testu Completu di PDF è HTML in Manticore" per più dettagli). A quistione resta cumu per verificà se un token hè una frasa esatta o micca. Questu pò esse fattu cuntrollà a so distanza da altri tokens in u vostru dizziunariu. Per esempiu, dicemu chì avemu un vocabulariu assai simplice chì hè custituitu da solu duie parolle (a è b):
Avà, pudete verificà se u token hè una corrispondenza di frasa esatta per mezu di a so distanza da tutti l'altri tokens in l'indici. S'ellu hè più grande di 1, allora sapemu chì ùn hè micca una coincidenza di frasa:
In questu articulu avemu da implementà u supportu per a frasa esatta per noi stessi. Tuttavia, vi cunsigliu assai di utilizà u supportu integratu di Manticore per questu invece cum'è descrittu in u Capitulu 7 di a guida "Ricerca Testu Full di PDF è HTML in Manticore". Puderete ancu amparà cumu cunfigurà u vostru analizzatore per ottene risultati specifichi, cum'è a rimozione di e parolle stop è stemming - chì sò tecniche di ottimisazione impurtanti quandu custruiscenu i mutori di ricerca. Pudemu principià per definisce u codice per custruisce un parser di quistione cum'è seguente:
Avete nutatu chì aghju utilizatu u nome di classe QueryParser invece di Tokenizer perchè questu in realtà analizza u testu in tokens (cù l'aiutu di u nostru vocabulariu) è poi custruisce a ricerca di ricerca. Andemu per ogni metudu à turnu, cuminciendu cù tokenize():
I tokens ponu esse custruitu da u nostru vocabulariu o da caratteri individuali usendu a funzione get_token . L'ultime hè utile per i partiti di frasi esatti chì avemu da vede avà. Se vulete più infurmazione nantu à cumu implementà diversi tipi di dumande, cum'è a corrispondenza di prefissi, fate un ochju à u Capitulu 4 di a guida "Ricerca Testu Full di PDF è HTML in Manticore". Per avà, fighjemu i partiti di frasi esatti:
In questu casu, usemu una espressione regulare simplice per currisponde à i tokens chì avemu bisognu è poi rimpiazzà elli cù elli stessi o aghjunghje quotes secondu s'ellu anu spaziu biancu intornu à elli. In altri palori, rimpiazzà e parolle chjave di una sola parolla cù sè stessu (per esempiu 'cat') ma aghjunghje citazioni intornu à frasi esatti chì includenu spazii (per esempiu "cat in u cappellu"). Questa hè una implementazione estremamente simplista di ciò chì serà una ottimisazione assai impurtante in i motori di ricerca di testu pienu è vi cunsigliu assai di leghje più nantu à questu, è ancu di implementà parsers di query adatti per i vostri bisogni prima di passà!
Pudete avà principià à scrive dumande contru à u vostru indice di novu:
È duvete vede i risultati chì aspetta! Gran travagliu!
Next Steps
U prossimu passu seria di creà una ricerca API. Pudete ottene questu utilizendu unu di i numerosi frameworks populari cum'è Django, Flask o Rails. Questu hè un tema cumplettamente separatu, cusì stà sintonizatu per più articuli nantu à questu in u futuru! Verificate i mo altri posti per amparà cumu fà a ricerca di testu cumpletu cù Elasticsearch è Manticore. Scuprite puru u nostru novu libru di cucina chì mostra esempi di usu per casi d'usu reali. Sì avete qualchì pensamentu o suggerimenti - fateci sapè in i cumenti sottu! Se vulete chatte nantu à a ricerca di testu cumpletu - unite à u nostru canale di chat in Gitter. Infine, ùn vi scurdate di seguità à noi in Twitter à twitter.com/manticoresearch è in Facebook à facebook.com/manticoresearch