Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Django 为可搜索的大型词典建模字段_Django - Fatal编程技术网

Django 为可搜索的大型词典建模字段

Django 为可搜索的大型词典建模字段,django,Django,我们有一个字段,它应该只接受非常大的字典的键(超过10k个键值),键是唯一的,但是关联的值很多,因为字典有同义词。然而,这本词典有许多缺陷。如果使用key=value关系,不仅字典的键值不是唯一的,而且键值和值都应该是模糊可搜索的,因为用户可能知道确切的键值或只是部分值 由于Django在其模型中是固执己见的,我不知道应该用什么字段来描述它。对于较小的字典,我们使用*Choices类型和Choices选项,但由于这本字典太大,它似乎不是一个明智的解决方案。我们正在评估字典的制作,但根据文档,这使

我们有一个字段,它应该只接受非常大的字典的键(超过10k个键值),键是唯一的,但是关联的值很多,因为字典有同义词。然而,这本词典有许多缺陷。如果使用key=value关系,不仅字典的键值不是唯一的,而且键值和值都应该是模糊可搜索的,因为用户可能知道确切的键值或只是部分值

由于Django在其模型中是固执己见的,我不知道应该用什么字段来描述它。对于较小的字典,我们使用*Choices类型和Choices选项,但由于这本字典太大,它似乎不是一个明智的解决方案。我们正在评估字典的制作,但根据文档,这使得解决方案不可行。使用一个将此抽象出来的中间模型似乎会使事情变得更加复杂,其他要求在第一段的最后一句中描述

我们目前的概念解决方案是将字典存储在一个提供模糊搜索(例如elasticsearch)的应用程序中,该应用程序返回json对象中的键值,并在html表单上有一个字段存储键,django从该应用程序查询键,以防止大脑分裂问题。但我们不知道如何让Django在后台执行此操作(可能需要一些缓存),以便确保存储在数据库中的密钥有效。这是我们的理想解决方案,因为我们可以使用以下方法:

def magichappens(键):
return query_elasticsearch_for_icdkey(key)#这应该返回一个iterable对象
ICDcode=类字符域(
最大长度=4,
选项=魔法笔(键),
)
并将使数据库更干净,以便进一步处理。但根据:

请注意,选项可以是任何序列对象,而不一定是列表或元组。这使您可以动态构造选择。但是,如果您发现自己的黑客选择是动态的,那么最好使用带有ForeignKey的适当数据库表。选择是为了静态数据,如果有变化,也不会有太大变化

我们已经发现不容易实施的解决方案

所有这些限制的原因是,字典是ICD、MEDRA和ATC代码,用户是健康专业人员,他们没有经过培训来记住每一个代码/密钥,这会使使用外键解决方案的问题变得微不足道