栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Elasticsearch

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Elasticsearch

是的,这是可行的,但是您的脚本没有这样做。尝试改用Groovy的any()方法:

doc['array.key'].values.any{ it -> it >= min + doc['number'] && it <= max + doc['number'] }

一些东西:

  1. 您的脚本只是遍历一个集合并检查条件,不返回布尔值,这就是您想要的
  2. 你可能会考虑更改为映射
    number
    到一个
    integer
    类型
  3. 不太确定为什么要有一个字段
    array
    ,里面有一个嵌套的字段
    key
    。您不能只是一个
    array
    将是…和数组的字段吗?;-)
  4. 请记住,在ES中,默认情况下,每个字段可以是单个值或数组。
  5. 正如@Val所提到的,您需要在自己的服务器中启用动态脚本,
    conf/elasticsearch.yml
    但是我想您已经完成了,否则您将获得异常。

这样的非常简单的映射应该起作用:

{    "mappings": {        "document": { "properties": {     "value": {         "type": "integer"     },     "key": {          "type": "integer"     } }        }    }}

例:

POST /documents/document/1 {  "number": 5,    "key": [      10,      5,      9,      20    ]}POST /documents/document/2 {  "number": 5,    "key": [      70,      72    ]}

查询:

GET /documents/document/_search{  "query": {    "bool": {      "filter": { "script": {     "lang": "groovy",     "params": {         "max": 64,         "min": 6     },     "script": "doc['key'].values.any{ it -> it >= min + doc['number'] && it <= max + doc['number'] }"        }      }    }  }}

结果:

{   "took": 22,   "timed_out": false,   "_shards": {      "total": 5,      "successful": 5,      "failed": 0   },   "hits": {      "total": 1,      "max_score": 0,      "hits": [         { "_index": "documents", "_type": "document", "_id": "1", "_score": 0, "_source": {    "number": 5,    "key": [       10,       5,       9,       20    ] }         }      ]   }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375409.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号