我认为,尽管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,这相对容易。