Django trigram_s аналогичный поиск не дает результата (Django 2.1 с бэкэндом Postgresql 10.5) - PullRequest
0 голосов
/ 20 января 2019

Я следовал инструкции на https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/lookups/#std:fieldlookup-trigram_similar, чтобы установить поиск триграмм в моей поисковой системе.Я добавил 'django.contrib.postgres' в свой INSTALLED_APPS в settings.py и установил расширение pg_trgm в своей базе данных PostgreSQL.Поиск по триграмме не дает результата, но нет ошибки, только пустота там, где должны быть результаты поиска.Моя поисковая система работала нормально с icontain поисками.Вот код моей поисковой системы с trigram_similar:

def query_search(request):
    articles = cross_currents.objects.all()
    search_term = ''
    if 'keyword' in request.GET:
        search_term = request.GET['keyword']
        articles = articles.filter(Title__trigram_similar=search_term)  

Title - это CharField в моей модели cross_currents:

class cross_currents(models.Model):
    Title = models.CharField(max_length=500)

Это то, что мойОболочка Django дала мне:

In [6]: cross_currents.objects.filter(Title__trigram_similar='modern')
Out[6]: <QuerySet []>

HTML-страница также ничего не возвращает.Однако, когда я делаю

cross_currents.objects.filter(Title__icontains='modern') 

, появляется много результатов.Есть идеи, почему мой поиск триграмм ничего не дает?

1 Ответ

0 голосов
/ 22 января 2019

Проблема заключалась в том, что пороговое значение сходства по умолчанию для Postgres установлено равным 0,3, что слишком много, чтобы возвращать результаты для поиска по одному слову в моем случае. Я считаю пороговое значение 0,01 эффективным в моем случае:

articles = articles.annotate(similarity=TrigramSimilarity('Title', search_term),).filter(similarity__gt=0.01).order_by('-similarity')
...