我在SO上阅读了几个类似的问题并建议解决方案不起作用。
我想找到字短于8的所有字段
我的数据库屏幕:
我尝试使用此查询
执行此操作{
"query": {
"match_all": {}
},
"filter": {
"script": {
"script": "doc['word'].length < 5"
}
}
}
我做错了什么?我错过了什么?
答案 0 :(得分:9)
脚本中使用的任何字段都完全加载到内存中(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#_document_fields),因此您可能需要考虑其他方法。
你可以,例如使用regexp-filter查找特定长度的字词,格式为.{0,4}
。
以下是您可以使用的可运行示例:https://www.found.no/play/gist/2dcac474797b0b2b952a
#!/bin/bash
export ELASTICSEARCH_ENDPOINT="http://localhost:9200"
# Index documents
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d '
{"index":{"_index":"play","_type":"type"}}
{"word":"bar"}
{"index":{"_index":"play","_type":"type"}}
{"word":"barf"}
{"index":{"_index":"play","_type":"type"}}
{"word":"zip"}
'
# Do searches
# This will not match barf
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d '
{
"query": {
"filtered": {
"filter": {
"regexp": {
"word": {
"value": ".{0,3}"
}
}
}
}
}
}
'