您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Django的sqlite3数据库中使用全文搜索?

如何在Django的sqlite3数据库中使用全文搜索?

我认为,尽管sqlite是一款了不起的软件,但其全文搜索功能却非常有限。相反,您可以使用带有某些后端(例如Elasticsearch)的Haystack Django应用程序为数据库建立索引。就FTS而言,具有此设置(仍然能够访问您的sqlite数据库)似乎是最可靠,最灵活的方式。

Elasticsearch具有基于Levenshtein距离的模糊搜索(简而言之,它将处理您的“示例”查询)。因此,您需要做的是正确的查询类型:

from haystack.forms import SearchForm
from haystack.generic_views import SearchView
from haystack import indexes


class QScriptIndex(indexes.SearchIndex, indexes.Indexable):
    v = indexes.CharField(document=True)

    def get_model(self):
        return QScript


class QScriptSearchForm(SearchForm):
    text_fuzzy = forms.CharField(required=False)

    def search(self):        
        sqs = super(QScriptSearchForm, self).search()

        if not self.is_valid():
            return self.no_query_found()

        text_fuzzy = self.cleaned_data.get('text_fuzzy')
        if text_fuzzy:
            sqs = sqs.filter(text__fuzzy=text_fuzzy)

        return sqs


class QScriptSearchView(SearchView):        
    form_class = QScriptSearchForm

更新:只要PostgreSQL具有Levenshtein距离功能,您还可以将其用作haystack后端以及独立的搜索引擎。如果选择第二种方法,则必须实现自定义查询表达式,如果使用的是最新版本的Django,这相对容易。

SQLServer 2022/1/1 18:34:50 有545人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶