【问题标题】:How to filter an exact match of ForeignKey field when using Django Elasticsearch使用Django Elasticsearch时如何过滤ForeignKey字段的完全匹配
【发布时间】:2021-06-02 11:24:27
【问题描述】:

我将Django Elasticsearch DSL 与 Django 3 应用程序、PostgreSQL 和 Elasticsearch 一起使用。作为模型我有(简化版)

class Jornal(models.Model):
    name = models.CharField(max_length = 250)
    slug = models.CharField(max_length = 250,blank=True,null = True,unique = True)

class Article(models.Model):
    title = models.CharField(max_length = 250)
    description = models.TextField()
    jornal = models.ForeignKey(Jornal,on_delete=models.CASCADE,related_name = 'jornal')

我想通过 jornal slug 过滤查询。为此,我有这个

q = Q("multi_match", query=termo, fields=['title','description'])
entries = ArticleDocument.search().query(q)
entries = entries.filter("match",jornal__slug = jornal_slug)

除了 jornal slug 外,它都可以工作。它不会过滤为完全匹配。

【问题讨论】:

标签: django elasticsearch elasticsearch-dsl


【解决方案1】:

问题与jornal 模型的slug 字段的索引方式有关。

我最初将其编入索引:

'slug': fields.TextField()

但是作为一个蛞蝓,它与 hyfen 有几个值,并且在索引时,elasticsearch 将它分解为多个标记。为避免这种情况,我不得不将其定义为 keyword 字段:

'slug': fields.KeywordField()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2022-12-17
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多