如何在 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 的所有相关方法,但它们似乎都不起作用。

我想要containsoverlap 的组合。

【问题讨论】:

【参考方案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 如何实现全文检索?

如何在 Django 中基于全文搜索功能 SearchRank 创建自定义排名?

Elasticsearch(全文搜索)

Elasticsearch(全文搜索)

在视图中使用全文搜索 + GIN (Django 1.11 )

Django 博客实现简单的全文搜索