在elasticsearch中设置聚合中的字符长度

时间:2015-10-15 18:13:50

标签: elasticsearch

我是弹性搜索的新手,我对聚合感到困惑。是否可以设置字段的长度。我的意思是

curl -XPOST "http://localhost:9200/market/product/_search" -d'
{
   "size": 0,
   "aggregations": {
      "name_count": {
         "terms": {
            "field": "name",
            "size":10
         }
      }
   }
}' 

我可以设置字段长度的长度(“字段”:“名称”)。

关于我认为可以使用脚本的解决方案。

curl -XPOST "http://localhost:9200/market/product/_search" -d'
{
   "size": 0,
   "aggregations": {
      "name_count": {
         "terms": {
            "field": "name",
            "size":10,
            "script" : "doc['name'].value.length > 2"
         }
      }
   }
}'

我不确定,如果我自己回答。但是我很困惑,所以如果有人能回答我的话。

由于

1 个答案:

答案 0 :(得分:0)

如果您想在Elasticsearch中为每个产品名称计算记录数,但又不想考虑短于三个字符的产品名称,则可以尝试以下方法:

{
    "size" : 0,
    "query" : {
        "regexp" : {
            "name" : ".{3,}"
        }
    },
    "aggregations": {
        "name_count": {
            "terms": {
                "field": "name",
                "size":10
            }
        }
    }
}

指定regexp查询将确保只有名称长度为>的文档您的汇总考虑了2。

我将此答案基于另一个stackoverflow帖子(ElasticSearch:filtering documents based on field length),其他用户询问他们如何根据字段长度过滤结果。