我正在使用带有固定数据库内容的sqlite3数据库的Django应用程序。固定是指数据库的内容不会随时间变化。该模型是这样的:
class QScript(models.Model):
ch_no = models.IntegerField()
v_no = models.IntegerField()
v = models.TextField()
该表中大约有6500条记录。给定一个可能缺少某些单词或某些单词拼写错误的文本,我需要确定其ch_no
和v_no
。例如,如果v
db中有一个文本为
“ This is an example verse” 的字段, 则 给定的文本(例如 “ This a egsample verse”)
应该给我ch_no
和v_no
db。我相信可以使用全文搜索来完成。
全文搜索可以做到吗?根据我的研究,我的猜测是可以的,正如sqlite3页面中所说: 全文搜索是“ Google,Yahoo和Bing对放置在万维网上的文档所做的事情” 。引用SO,我也与许多其他文章一起阅读了这篇文章,但是没有找到与我的要求 最接近的内容 。
如何在Django模型中使用FTS? 我读了这篇文章,但没有帮助。似乎太过时了。在这里阅读: “ …需要直接操作数据库以添加全文索引” 。搜索提供了大多数与MySQL相关的信息,但是我需要在sqlite3中进行。那么如何在sqlite3中进行 直接操作 呢?
我坚持使用sqlite3的选择正确吗?还是应该使用其他方式(例如Alex
Morozov所说的haystack +
elasticsearch )?我的数据库不会再增大,而且我研究过,对于小型数据库,sqlite 几乎总是
更好(我的情况与使用sqlite时的第四名相匹配)。
我认为,尽管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,这相对容易。
本文向大家介绍如何使用Python将数据存储和检索到Sqlite3数据库中?,包括了如何使用Python将数据存储和检索到Sqlite3数据库中?的使用技巧和注意事项,需要的朋友参考一下 您可以使用sqlite3模块轻松地将日期存储和检索到Sqlite3数据库中。在数据库中插入日期时,直接传递日期,Python会自动处理它。 示例 输出结果 这将给出输出- 现在,当您从数据库中获取值时,您将获得已
问题内容: 我想将带有sqlite3的应用程序部署为Heroku上的数据库。但是,似乎Heroku不支持将sqlite3作为数据库的应用程序。是真的吗 无法在Heroku上部署由sqlite3支持的应用程序吗? PS:我已经使用PythonAnywhere成功部署了我的应用程序,但是现在想知道是否有使用Heroku部署它的任何可能方法。 问题答案: 由于Heroku的dynos没有可在部署之间持久
问题内容: Iam将创建一个包含至少2亿个条目的庞大数据库。该数据库需要使用全文本进行搜索,并且应该是快速的。 我的数据库从许多不同的数据源获取数据,我需要定期导入新数据或更新数据。 将我的所有数据存储在诸如mysql之类的关系数据库中,然后创建一个nosql文档数据库(例如mongodb或elasticsearch)只是出于搜索目的,还是在可靠性和预防方面没有任何好处,这是一个好主意吗?多余的信
问题内容: 我在netbeans中创建了jtable,并在jtable中填充了数据库中的数据,但是我无法使用jtextfield在jtable中实现搜索选项。谁能指导我。谢谢 问题答案: 为了在表上搜索内容,必须将原始内容存储在某个变量中。在下面的示例中,我将表模型的初始值存储在向量中。 下面有两种实现方式:一种是在文本字段上键入内容后立即进行搜索,另一种则仅在单击按钮后进行搜索。 对于第一个,您
如何按ID搜索字符串路径变量而不是整数?我喜欢查找名称。 下面的方法运行良好,但仅将ID作为整数值。 谢谢:)
问题内容: 我已经在Django中创建了一个不错的数据库,并且希望通过网站内容之外的一些python脚本进行交互,因此我很好奇是否可以在Django之外使用Django数据库API网站,如果有的话,有没有人知道如何实现此目的?Google并没有为此带来很多成功。 问题答案: 在进行任何调用(包括导入模型)之前,你只需要配置Django设置即可。像这样: 同样,请确保在运行之前运行该代码,例如: 然