如何在 django 数组字段中执行全文搜索
Posted
技术标签:
【中文标题】如何在 django 数组字段中执行全文搜索【英文标题】:How to perform a fulltext search in django array field 【发布时间】:2018-01-13 05:50:04 【问题描述】:我有一个ArrayField
字符串,我想搜索是否有任何项目包含预期字符串集中的任何项目。
我已经定义了这样的字段:
class Path(models.Model):
path = models.TextField()
files = ArrayField(models.CharField(max_length=300))
server_name = models.CharField(max_length=50)
def __str__(self):
return self.path
我想检查一下文件是否包含任何可能包含这些字符串之一的名称['foo', 'bar', 'baz']
。这意味着如果files
包含以下项目:
['example', 'examplebar']
我希望它返回 true。
我已经研究了 ArrayField 的所有相关方法,但它们似乎都不起作用。
我想要contains
和overlap
的组合。
【问题讨论】:
【参考方案1】:django 似乎不直接支持这一点,所以你必须手动通过列表并搜索子字符串来完成。
如果您在变量path
中有一个Path
对象,并且您在substrings
中搜索的字符串,您可以这样做:
for file in path.files:
for s in substrings:
if s in file:
return True
return False
如果您希望它完全由数据库处理,您必须为路径创建一个新表并使用外键,而不是 ArrayField
。
【讨论】:
以上是关于如何在 django 数组字段中执行全文搜索的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Django 中基于全文搜索功能 SearchRank 创建自定义排名?