【问题标题】:Django 2 + PostgreSQL FullText search not matching what it shouldDjango 2 + PostgreSQL 全文搜索与应有的不匹配
【发布时间】:2018-07-21 17:47:27
【问题描述】:

我遇到了一个问题,希望有人能告诉我。

我需要使用 Django 2 和 PostgreSQL 10.1 对具有多列的表执行全文搜索并按排名对结果进行排序。 到目前为止,这是我的代码:

from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector

# other unrelated stuff here
vector = SearchVector("very_important_field", weight="A") + \
                     SearchVector("tags", weight="A") + \
                     SearchVector("also_important_field", weight="B") + \
                     SearchVector("not_so_important_field", weight="C") + \
                     SearchVector("not_important_field", weight="D")
query = SearchQuery(search_string, config="italian")
rank = SearchRank(vector, query, weights=[0.4, 0.6, 0.8, 1.0]). # D, C, B, A
full_text_search_qs = MyEntry.objects.annotate(rank=rank).filter(rank__gte=0.4).order_by("-rank")

奇怪的事实是,一些 search_string 没有返回任何结果,而如果我执行一个简单的查询,例如

SELECT * FROM my_entry
WHERE very_important_field LIKE '%search_string%'
OR tags LIKE '%search_string%'
OR ...

如果我将搜索限制在重要领域,我也会得到大量结果。 我已经尝试过使用 filter(rank_gte=0.4) 并删除它。结果还是一样。

到目前为止,我还没有使用 GIN o GIST 索引,因为我只是在试验。

关于我错过了什么的任何线索? 提前致谢

【问题讨论】:

    标签: python django postgresql full-text-search


    【解决方案1】:

    我想我找到了问题。

    SearchQuery() 上的关键字参数

    config='italian'
    

    似乎没有用。为了解决这个问题,我在我的数据库上发布了:

    ALTER DATABASE my_db SET default_text_search_config = 'pg_catalog.italian';
    

    现在一切正常。

    我希望这也可以帮助其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      相关资源
      最近更新 更多