13

我有这样的映射:

{
  "post": {
    "properties": {
      "author_gender": {
        "type": "string",
        "index": "not_analyzed",
        "omit_norms": true,
        "index_options": "docs"
      },
      "author_link": {
        "type": "string",
        "index": "no"
      },
      "content": {
        "type": "string"
      },
      "mentions": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "profile_image_url": {
            "type": "string"
          },
          "screen_name": {
            "type": "string"
          }
        }
      }
   }
}

我需要按mentions对象的大小进行搜索。我试过这个:

{
  "filter": {
    "script": {
      "script": "doc['mentions'].values.length == 2"
    }
  }
}

这是行不通的。给出错误

嵌套:ElasticSearchIllegalArgumentException [No field found for [mentions] in mapping with types [post]];

我也尝试将脚本部分替换为doc['mentions.id'].value.length == 2. 这也是错误的

嵌套:ArrayIndexOutOfBoundsException[10];

如何查询mentions对象大小为 2 的记录?

4

3 回答 3

14

elasticsearch 指南建议对对象使用size()而不是length。所以试试这个:

{
 "filter": {
   "script": {
     "script": "doc['mentions.id'].values.size() == 2"
    }
  }
}

祝一切顺利。

于 2013-06-26T20:38:09.913 回答
3

ElasticSearch 不会像您想象的那样存储对象数组。相反,为每个对象属性存储多个数组。

所以这就是为什么你必须使用“子数组”来代替。

于 2015-04-13T14:51:31.677 回答
0

对我来说,它是这样工作的:

ES 版本 - 7.11.1

我有这样的映射:

{
  "items": {
    "properties": {
      "description": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "quantity": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "value": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    }
  }
}

我的查询是这样的:

{
  "filter": {
    "script": {
      "script": "doc['items.description.keyword'].size() == 2"
    }
  }
}
于 2021-10-28T10:16:38.370 回答