Nə üçün tam mətn axtarışı
Səhifələmə və axtarış dərsində sadə SearchVector nümunəsi görmüsünüz. Burada onu dərinləşdiririk: config, sıralama, GinIndex, trigram və işıqlandırma.
icontains hər sətirdə alt sətri axtarır. shoes ilə shoe fərqli sözlərdir, nəticələrin sırası yoxdur, böyük cədvəldə isə ardıcıl skan gedir. PostgreSQL isə mətni leksemlərə çevirir:
SELECT to_tsvector('english', 'Running shoes for runners');
-- 'run':1,5 'shoe':2
SELECT websearch_to_tsquery('english', '"running shoes" -boots');
-- 'run' <-> 'shoe' & !'boot'💡 Tam mətn axtarışı yalnız PostgreSQL-də var.
django.contrib.postgresINSTALLED_APPS-a əlavə olunmalıdır.
SearchVector və SearchQuery
# settings.py
INSTALLED_APPS = [
# ...
"django.contrib.postgres",
"articles",
]
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "shop",
# USER, PASSWORD, HOST from environment
}
}from django.contrib.postgres.search import SearchVector
from articles.models import Article
vector = SearchVector("title", "body", config="english")
found = Article.objects.annotate(search=vector).filter(search="django indexes")config mətnin dilini seçir. Vektor və sorğu üçün eyni olmalıdır, yoxsa leksemlər uyğun gəlməyə bilər.
from django.contrib.postgres.search import SearchQuery
SearchQuery("red tomato") # plain: all words
SearchQuery("red tomato", search_type="phrase") # words side by side
SearchQuery("red & tomato", search_type="raw") # raw tsquery syntax
SearchQuery('"red tomato" -green', search_type="websearch")