【问题标题】:django-elasticsearch-dsl-drf with JSONfielddjango-elasticsearch-dsl-drf 与 JSONfield
【发布时间】:2021-04-15 19:13:21
【问题描述】:

我正在使用 django-elasticsearch-dsl-drf 包,并且我有想要索引的 Postgres jsonField。我尝试在文档中使用 Nestedfield,但没有任何属性,因为 json 字段是任意的,但我无法在该字段上进行搜索,并且我在他们的文档中看不到任何与此相关的内容。

知道如何实现这一目标吗?

映射:

    {
  "mappings": {
    "_doc": {
      "properties": {
        "jsondata": {
          "type": "nested",
          "properties": {
            "timestamp": {
              "type": "date"
            },
          "gender": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "group_id": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }, ...

我想在那个字段上搜索 jsondata.gender = x

【问题讨论】:

  • 嵌套字段应该用于对象数组。在 Elasticsearch 中查询嵌套对象也有点不同。请看:elastic.co/guide/en/elasticsearch/reference/current/nested.html。由于 json 字段是任意的,如果可以尝试使用对象类型会很好。
  • 我都试过了,它映射正确。但是我怎样才能在视图集中的那个字段上搜索呢? “在他们的文档中”
  • 如果您能分享地图和一些示例数据,那就太好了。
  • 问题已更新。与他们的文档一样,他们有“嵌套字段过滤器”,但他们知道要在其上搜索的键。对于我的情况,我不知道。感谢您的帮助!
  • 查询有用吗?

标签: json django elasticsearch elasticsearch-dsl


【解决方案1】:

查询 jsonfield.gender = x

GET <index>/_search
{
  "query": {
    "nested": {
      "path": "jsonfield",
      "query": {
        "term": {
          "jsonfield.gender.keyword": {
            "value": "x"
          }
        }
      }
    }
  }
}

注意:查询尚未使用 Kibana 开发工具验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2021-07-08
    • 2021-06-09
    • 1970-01-01
    相关资源
    最近更新 更多