Django:文本搜索:Haystack vs postgres全文搜索

时间:2018-02-02 12:09:28

标签: django postgresql full-text-search django-haystack

我正在使用Django 2.0

我有标题和说明的帖子。我第一次尝试实现搜索功能。

我在搜索以下选项后找到了:

Haystack和postgres全文搜索(https://docs.djangoproject.com/en/2.0/ref/contrib/postgres/search/

建议使用哪个。

2 个答案:

答案 0 :(得分:1)

我可以建议使用Django的PostgreSQL全文搜索。

官方文件非常好。

如果您想了解有关我的建议的更多信息和动机,您可以阅读我就此主题撰写的文章:Full-Text Search in Django with PostgreSQL

答案 1 :(得分:0)

仅供参考,SearchVector / SearchQuery方法实际上并未捕获所有情况,例如部分单词(请参阅https://www.fusionbox.com/blog/detail/partial-word-search-with-postgres-full-text-search-in-django/632/以供参考)。根据您的约束,您可以毫无困难地实现自己的工作。 例如,在viewsets的get_queryset方法中:

    ...other params...

            search_terms = self.request.GET.get('q')
            if search_terms:
                # remove possible other delimiters and other chars
                # that could interfere
                cleaned_terms = re.sub(r'[!\'()|&;,]', ' ', search_terms).strip()
                if cleaned_terms:
                    # Check against all the params we want
                    # apply to previous terms' filtered results
                    q = reduce(
                        lambda p, n: p & n,
                        map(
                            lambda word:
                                Q(your_property__icontains=word) | Q(
                                    second_property__icontains=word) | Q(
                                    third_property__icontains=word)
                            cleaned_terms.split()
                        )
                    )
                    qs = YourModel.objects.filter(q)
           return qs