Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过在Django模型字段中搜索文本来搜索匹配项_Python_Django_Caching_Search_Model - Fatal编程技术网

Python 通过在Django模型字段中搜索文本来搜索匹配项

Python 通过在Django模型字段中搜索文本来搜索匹配项,python,django,caching,search,model,Python,Django,Caching,Search,Model,我有一个类似的模型 class Item(models.Model): value = models.IntegerField() words = models.CharField(max_length=512, unique=True) 我希望能够搜索对象,并返回特定查询的最佳匹配项。”“最佳匹配”可以定义为与words字段最接近的基于文本的结果(我可以编写一个函数,返回“接近度”的整数表示。没问题,模型搜索和缓存是问题所在) 理想情况下,每次进行搜索时(如果以前进行过搜索)

我有一个类似的模型

class Item(models.Model):
    value = models.IntegerField()
    words = models.CharField(max_length=512, unique=True)
我希望能够搜索对象,并返回特定查询的最佳匹配项。”“最佳匹配”可以定义为与
words
字段最接近的基于文本的结果(我可以编写一个函数,返回“接近度”的整数表示。没问题,模型搜索和缓存是问题所在)

理想情况下,每次进行搜索时(如果以前进行过搜索),只应搜索自上次进行查询以来的新元素(其他结果已缓存)。我找不到一个django模块来实现这一点

一些信息: DB:postgres
连接器:psycopg2

您可以使用difflib对查询进行排序,因此它会将最佳匹配项放在顶部[-1]

>>> import difflib
>>> a = ["spam", "eggs", "spammy", "eggy"]
>>> b = 'spam'
>>> sorted(a, key=lambda x: difflib.SequenceMatcher(None, x, b).ratio())
['eggy', 'eggs', 'spammy', 'spam']

您可以使用difflib对查询进行排序,以便将最佳匹配项放在顶部[-1]

>>> import difflib
>>> a = ["spam", "eggs", "spammy", "eggy"]
>>> b = 'spam'
>>> sorted(a, key=lambda x: difflib.SequenceMatcher(None, x, b).ratio())
['eggy', 'eggs', 'spammy', 'spam']

这不完全是我想要的,因为它会在每次执行搜索之前从我的数据库中提取整个数据集,然后才能解析它。这不完全是我想要的,由于每次执行搜索时都会从我的数据库中提取整个数据集,然后才能对其进行解析,因此最终我使用了带有Django插件的弹性搜索,因为Django内部的模式匹配过于昂贵。我最终使用了带有Django插件的弹性搜索,因为Django内部的模式匹配太昂贵了。