Haystack este o bibliotecă Python care oferă căutare modulară pentru Django. Dispune de un API care oferă suport pentru diferite capete de căutare, cum ar fi Elasticsearch, Whoosh, Xapian și Solr.
Elasticsearch este un popular motor de căutare Lucene capabil de căutare full-text și este dezvoltat în Java.
Căutarea Google utilizează aceeași abordare a indexării datelor și de aceea este foarte ușor să preluați orice informații cu doar câteva cuvinte cheie, după cum se arată mai jos.
Primul pas este să obțineți funcția Elasticsearch la mașina locală. Elasticsearch necesită Java, deci trebuie să aveți instalat Java pe mașina dvs..
Vom urma instrucțiunile de pe site-ul Elasticsearch.
Descărcați gudronul Elasticsearch 1.4.5 după cum urmează:
curl -L -O https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.4.5.tar.gz
Extrageți-l după cum urmează:
tar -xvf elasticsearch-1.4.5.tar.gz
Acesta va crea apoi un lot de fișiere și foldere din directorul dvs. curent. Apoi intram in directorul bin dupa cum urmeaza:
cd elasticsearch-1.4.5 / bin
Porniți Elasticsearch după cum urmează.
./ elasticsearch
Pentru a confirma dacă sa instalat cu succes, accesați http://127.0.0.1:9200/ și ar trebui să vedeți ceva de genul acesta.
"nume": "W3nGEDa", "cluster_name": "elasticsearch", "cluster_uuid": "ygpVDczbR4OI5sx5lzo0-w", "versiune": "număr": "5.6.3", "build_hash": "1a2f265"; "build_date": "2017-10-06T20: 33: 39.012Z", "build_snapshot": false, "lucene_version": "6.6.1", "slogan": "Știți, pentru căutare"
Asigurați-vă că aveți, de asemenea, instalat haystack.
pip instalați django-haystack
Să creăm proiectul nostru Django. Proiectul nostru va putea să indexeze toți clienții dintr-o bancă, facilitând căutarea și preluarea datelor folosind doar câțiva termeni de căutare.
django-admin startproject Bank
Această comandă creează fișiere care oferă configurații pentru proiectele Django.
Să creăm o aplicație pentru clienți.
cd Banca python manage.py startapp clienți
settings.py
ConfigurațiilePentru a utiliza Elasticsearch pentru a indexa conținutul care poate fi căutat, va trebui să definim o setare de back-end pentru stackul de hay în proiectul nostru settings.py
fişier. Vom folosi Elasticsearch ca pe un back-end.
HAYSTACK_CONNECTIONS
este o setare cerută și ar trebui să arate astfel:
HAYSTACK_CONNECTIONS = 'default': 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine', 'URL': 'http://127.0.0.1:9200/', 'INDEX_NAME'
În cadrul settings.py
, vom adăuga, de asemenea, fânul de carne și clienții la lista de aplicații instalate
.
INSTALLED_APPS = ['django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles' , 'rest_framework', 'haystack', 'client']
Să creăm un model pentru clienți. În clienților / modele.
py
, adăugați următorul cod.
din __future__ import unicode_literals de la modelele de import django.db # Creați-vă modelele aici. client_type = (("activ", "activ"), (inactiv), "inactiv") clasa Client (models.Model): id = models.IntegerField (primary_key = True) first_name = models.CharField (max_length = , null = False, martor = Adevărat) last_name = models.CharField (max_length = 50, null = Adevărat, martor = adevărat) phone = models.CharField (max_length = 30, null = False, default = "Active") adresa = modele.CharField (max_length = 50, null = False, blank = False) def save (self, ** kwargs) def __unicode __ (auto): întoarcere ": ". format (auto.first_name, auto.last_name)
Înregistrați-vă Client
model în admin.py
asa:
de la import django.contrib admin de la .models import Client # Înregistrați-vă modelele aici. admin.site.register (Client)
Aplicați migrațiile și creați un cont de administrator.
python manage.py migrează python manage.py createsuperuser
Rulați serverul și navigați la http: // localhost: 8000 / admin /. Acum ar trebui să puteți vedea modelul dvs. de client acolo. Continuați și adăugați noi clienți în admin.
Pentru a indexa modelele noastre, începem prin crearea unui SearchIndex
. SearchIndex
obiectele determină ce date ar trebui plasate în indexul de căutare. Fiecare tip de model trebuie să aibă un model unic searchIndex
.
SearchIndex
obiectele sunt modul în care haystack-ul determină ce date trebuie plasate în indexul de căutare și gestionează fluxul de date. SearchIndex
, vom moșteni de la indexes.SearchIndex
și indexes.Indexable
, definiți câmpurile cu care vrem să stocăm datele noastre și să definim a get_model
metodă.
Să creăm CustomerIndex
pentru a corespunde cu noastre Client
modelare. Creați un fișier search_indexes.py
în directorul de aplicații pentru clienți și adăugați următorul cod.
din importul de module. Clientul din indexul de import al haystack-ului, indexul CustomerIndex (indexes.SearchIndex, indexes.Indexable): text = indexes.EdgeNgramField (document = True, use_template = True) first_name = indexes.CharField (model_attr = 'first_name') last_name = .CharField (model_attr = 'last_name') other_names = indexes.CharField (model_attr = 'other_names') email = indexes.CharField (model_attr = 'email') phone = indexes.CharField (model_attr = .IntegerField (model_attr = 'echilibru', default = "0") customer_status = indexes.CharField (model_attr = 'customer_status') adresa = indexes.CharField (model_attr = 'adresa') def get_model (self) (self, using = Niciuna): return self.get_model () objects.all ()
EdgeNgramField
este un câmp în haystack SearchIndex
care împiedică potrivirile incorecte atunci când părți ale a două cuvinte diferite sunt împrăștiate împreună.
Ne permite să folosim Completare automată
caracteristică pentru a efectua interogări. Vom folosi autocomplete atunci când vom începe să interogăm datele noastre.
Document = Adevărat
indică câmpul principal pentru căutarea în interiorul. În plus, use_template = Adevărat
în text
câmpul ne permite să folosim un șablon de date pentru a construi documentul care va fi indexat.
Să creăm șablonul în directorul de șabloane al clienților noștri. Interior căutare / indici / clienti / customers_text.txt
, adăugați următoarele:
object.first_name object.last_name object.other_names
Acum, că datele noastre sunt în baza de date, este timpul să le punem în indexul nostru de căutare. Pentru a face acest lucru, pur și simplu alerga ./manage.py rebuild_index
. Veți obține totalul a câte modele au fost procesate și plasate în index.
Indexarea a 20 de clienți
Alternativ, puteți utiliza RealtimeSignalProcessor
, care gestionează automat actualizările / ștergerile pentru dvs. Pentru ao folosi, adăugați următoarele în settings.py
fişier.
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
Vom folosi un șablon de căutare și API-ul Haystack pentru a interoga datele.
Șablon de căutare
Adăugați urnele de haystack în URLconf.
url (r '^ search /', include ('haystack.urls')),
Să creăm șablonul nostru de căutare. În template-uri / search.html
, adăugați următorul cod.
% block head% % endblock% % bloc% navbar% % endblock% % conținutul blocului%% endblock%
page.object_list
este o listă de Rezultatul căutării
obiecte care ne permit să obținem obiectele modelului individual, de exemplu, result.first_name
.
Structura completă a proiectului dvs. ar trebui să arate astfel:
Acum rulați serverul, mergeți la 127.0.0.1:8000/search/
, și faceți o căutare după cum se arată mai jos.
O căutare a Albert
va da rezultate tuturor clienților cu numele Albert
. Dacă niciun client nu are numele Albert, atunci interogarea va da rezultate goale. Simțiți-vă liber să vă jucați cu propriile date.
Haystack are o SearchQuerySet
clasa care este concepută pentru a face mai ușoară și coerentă efectuarea căutărilor și iterarea rezultatelor. O mare parte din SearchQuerySet
API este familiarizat cu ORM-ul lui Django setul de interogări
.
În clienții / views.py
, adăugați următorul cod:
de la django.shortcuts import render de la rest_framework.decorators import (api_view, renderer_classes,) de la .models import Client de la haystack.query import SearchQuerySet de la rest_framework.response import Response # Creați vizualizările dvs. aici. @api_view (['POST']) def search_customer (cerere): name = request.data ['name'] customer = SearchQuerySet : all_results = "first_name": i.first_name, "last_name": i.last_name, "balance": i.balance, "status": i.customer_status, searched_data.append (all_results)
Completare automată
este o metodă de comandă rapidă pentru a efectua o căutare automată completă. Trebuie să fie executat împotriva câmpurilor care sunt fie EdgeNgramField
sau NgramField
.
În cele de mai sus set de interogări
, noi folosim conține
metoda de filtrare a căutării noastre pentru a prelua numai rezultatele care conțin caracterele definite. De exemplu, Al
va prelua numai detaliile clienților care conțin Al
. Rețineți că rezultatele vor veni numai din câmpurile definite în secțiunea client_text.txt fișier
.
În afară de conține
Căutarea câmpului, există alte câmpuri disponibile pentru a efectua interogări, inclusiv:
O cantitate imensă de date este produsă la un moment dat în mass-media sociale, sănătate, cumpărături și alte sectoare. O mare parte din aceste date sunt nestructurate și împrăștiate. Aplicația elastică poate fi utilizată pentru a procesa și analiza aceste date într-o formă care poate fi înțeleasă și consumată.
Elasticsearch a fost de asemenea utilizat extensiv pentru căutarea de conținut, analiza datelor și interogări. Pentru mai multe informații, vizitați site-urile Haystack și Elasticsearch.