我正在成功使用Django的full text search。但是,我想匹配引用的短语,看不到该怎么做。
例如,我有一个模型:
from django.contrib.postgres.indexes import GinIndex
from django.contrib.postgres.search import SearchVectorField
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
search_document = SearchVectorField(null=True)
class Meta:
indexes = [
GinIndex(fields=['search_document'])
]
我已经做到了:
from django.contrib.postgres.search import SearchVector
Article.objects.update(
search_document=(
SearchVector('title', weight='A') \
+ SearchVector('body', weight='B')
)
)
但是,如果我搜索:
“美味苹果”鱼
像这样:
from django.contrib.postgres.search import SearchQuery
qs = Article(
search_document=SearchQuery('"tasty apples" fish'))
然后结果与我搜索的结果相同
美味的苹果鱼
即包含这三个词的文章,而不是包含“美味苹果”和“鱼”一词的文章。
是否可以搜索这样的短语?
答案 0 :(得分:0)
Django即将发布的新版本2.2将提供a search type "phrase"。
您可以研究一下如何在Django 2.2的SearchQuery
class中生成SQL,并在无法尽快升级的情况下将其反向移植到Django版本。
Postgresql documentation中提供了文本搜索功能的列表。