一。Ingest Node
IngestNode节点被用于对原始json数据预处理的节点 该节点只需要在 elasticsearch.yml中 添加 node.ingest: true 需要预处理的文档 只需要
添加一个pipeline(管道) 指定一系列的processor (处理器) 所以管道被运行在ingest节点 pipeline管道包含若干个处理器 源文档的处理可以
指定pipeline管道
在处理文档时 指定管道的语法是
PUT 索引/类型/id?pipeline=指定管道
{
"foo": "bar"
}
pipeline的维护1》添加管道(参考https://www.elastic.co/guide/en/elasticsearch/reference/current/put-pipeline-api.html)
管道添加语法
PUT _ingest/pipeline/管道id
{
"description" : "测试管道",
"processors" : [
指定多个处理器
]
}
这里演示一个set处理器 在文档添加是 set一个字段(使用之前数据 http://blog.csdn.net/liaomin416100569/article/details/78727827)比如在添加数据是 添加一个 状态字段 status:1
添加处理器
curl -XPUT '192.168.58.147:9200/_ingest/pipeline/myp' -d '
{
"description" : "测试管道",
"processors" : [
{
"set" : {
"field": "status",
"value": "1"
}
}
]
}';
尝试添加一个用户信息curl -XPUT '192.168.58.147:9200/user/info/12?pipeline=myp' -d '
{"country":"中国","provice":"广东省","city":"广州市","age":"89","name":"王冠宇","desc":"王冠宇是王五的儿子"}
';
查看该doc 发现多了一个status:1的字段 [root@node1 ~]# curl -XGET '192.168.58.147:9200/user/info/12?pretty'
{
"_index" : "user",
"_type" : "info",
"_id" : "12",
"_version" : 1,
"found" : true,
"_source" : {
"country" : "中国",
"city" : "广州市",
"provice" : "广东省",
"name" : "王冠宇",
"age" : "89",
"desc" : "王冠宇是王五的儿子",
"status" : "1"
}
}
2》删除管道curl -XDELETE '192.168.58.147:9200/_ingest/pipeline/myp'
修改 参考官方文档二。常用前置处理器(参考https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest-processors.html)
1》 set前置处理器 (https://www.elastic.co/guide/en/elasticsearch/reference/current/set-processor.html)
在文档被处理前 添加一个字段 语法
{
"set": {
"field": "field1",
"value": 582.1
}
}
2》GROK处理器(https://www.elastic.co/guide/en/elasticsearch/reference/current/grok-processor.html)使用grok表达式匹配字段中 特定规则的字符到对应json
grok表达式是正则更上一层的表达式 grok也支持正则的语法
语法格式是
%{SYNTAX:SEMANTIC}
SYNTAX表示匹配的表达式 SEMANTIC表示将匹配的值写入的字段名 比如
3.44 55.3.244.1
匹配grok表达式%{NUMBER:duration} %{IP:client}
NUMBER和IP都是内置的表达式名称 默认存在直接使用 举例 比如管道定义curl -XPUT '192.168.58.147:9200/_ingest/pipeline/myp1?pretty' -d '
{
"description" : "grok测试",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"]
}
}
]
}';
测试数据curl -XPUT '192.168.58.147:9200/test/test/1?pipeline=myp1&pretty' -d '
{
"message": "55.3.244.1 GET /index.html 15824 0.043"
}
';
查询结果
[root@node1 httpd]# curl -XGET '192.168.58.147:9200/test/test/1?pretty'
{
"_index" : "test",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"duration" : "0.043",
"request" : "/index.html",
"method" : "GET",
"bytes" : "15824",
"client" : "55.3.244.1",
"message" : "55.3.244.1 GET /index.html 15824 0.043"
}
}
其他处理器参考官网