我想对具有以下值的字段进行聚合:文档1_field:“A”文档2_field:“A,B”文档3_field:“A,B,C”我可以使用什么Map/设置,以便当我在这个字段上聚合时,我应该得到这样的结果:键:A计数:3键:“B”计数:2键:“C”计数:3我尝试在上面的字段中添加逗号分隔分析器,但它没有给我想要的结果,我仍然得到这样的结果键:“A”计数:1按键:“A、B、C”计数:1这不是我想要的你能帮助我在这个领域如何聚合吗?
ijxebb2r1#
最好的方法是在摄取时使用摄取管道和split processor分割字段:使用您提供的相同文档模拟以下摄取管道将产生以下结果:
split
POST _ingest/pipeline/_simulate { "pipeline": { "processors": [ { "split": { "field": "field_name", "separator": "\\s*[,;]\\s*" } } ] }, "docs": [ { "_source": { "field_name": "A" } }, { "_source": { "field_name": "A, B" } }, { "_source": { "field_name": "A; B; C" } } ] }
字符串结果如下:
{ "docs": [ { "doc": { "_source": { "field_name": [ "A" ] } } }, { "doc": { "_source": { "field_name": [ "A", "B" ] } } }, { "doc": { "_source": { "field_name": [ "A", "B", "C" ] } } } ] }
型这意味着,不是索引"A, B, C",而是索引一个包含三个单独值的数组:["A", "B", "C"],然后您可以轻松地聚合并获得想要的结果。如果你想走这条路,只需创建管道:
"A, B, C"
["A", "B", "C"]
PUT _ingest/pipeline/splitter { "processors": [ { "split": { "field": "field_name", "separator": "\\s*,\\s*" } } ] }
型然后通过引用来索引您的文档:
PUT index/_doc/1?pipeline=splitter { "field": "A, B, C" }
型
1条答案
按热度按时间ijxebb2r1#
最好的方法是在摄取时使用摄取管道和
split
processor分割字段:使用您提供的相同文档模拟以下摄取管道将产生以下结果:
字符串
结果如下:
型
这意味着,不是索引
"A, B, C"
,而是索引一个包含三个单独值的数组:["A", "B", "C"]
,然后您可以轻松地聚合并获得想要的结果。如果你想走这条路,只需创建管道:
型
然后通过引用来索引您的文档:
型