如何使用.net elasticsearch 客户端查询logstash 索引?
How to query logstash indexes with .net elasticsearch client?
我正在尝试使用 NEST 来搜索使用 logstash(基本上是 logstash-*)创建的弹性搜索索引。
我已经使用以下代码设置了 NEST:
Node = new Uri("http://localhost:9200");
Settings = new ConnectionSettings(Node);
Settings.DefaultIndex("logstash-*");
Client = new ElasticClient(Settings);
这是我尝试获得结果的方式:
var result = Client.Search<Logstash>(s => s
.Query(p => p.Term("Message", "*")));
我得到 0 次点击:
http://screencast.com/t/d2FB9I4imE
这是我想要查找的条目示例:
{
"_index": "logstash-2016.06.20",
"_type": "logs",
"_id": "AVVtswJxpdkh1tFPP9S5",
"_score": null,
"_source": {
"timestamp": "2016-06-20 14:04:55.6650",
"logger": "xyz",
"level": "debug",
"message": "Processed command service method SearchService.SearchBy in 65 ms",
"exception": "",
"url": "",
"ip": "",
"username": "",
"user_id": "",
"role": "",
"authentication_provider": "",
"application_id": "",
"application_name": "",
"application": "ZBD",
"@version": "1",
"@timestamp": "2016-06-20T12:04:55.666Z",
"host": "0:0:0:0:0:0:0:1"
},
"fields": {
"@timestamp": [
1466424295666
]
},
"sort": [
1466424295666
]
}
我用的是5.0.0-alpha3版本,NEST客户端是alpha2版本atm
这是因为
...
"_type": "logs",
...
当您像您一样进行查询时,它会命中 logstash
而不是 logs
类型,因为 NEST 从通用参数推断类型名称。你有两种选择来解决这个问题。
告诉 NEST 将 Logstash
类型映射到 logs
类型
通过在客户端设置此映射来请求 elasticsearch
设置:
var settings = new ConnectionSettings()
.MapDefaultTypeNames(m => m.Add(typeof(Logstash), "logs");
var client = new ElasticClient(settings);
通过在请求中显式设置类型来覆盖默认行为
参数:
var result = Client.Search<Logstash>(s => s
.Type("logs")
.Query(p => p.Term("message", "*")));
另请注意,您应该在术语描述符中使用 message
而不是 Message
因为您在索引中没有这样的字段。其次,据我所知
术语查询不支持知道通配符。你可能想使用
query string 相反。
希望对您有所帮助。
我正在尝试使用 NEST 来搜索使用 logstash(基本上是 logstash-*)创建的弹性搜索索引。
我已经使用以下代码设置了 NEST:
Node = new Uri("http://localhost:9200");
Settings = new ConnectionSettings(Node);
Settings.DefaultIndex("logstash-*");
Client = new ElasticClient(Settings);
这是我尝试获得结果的方式:
var result = Client.Search<Logstash>(s => s
.Query(p => p.Term("Message", "*")));
我得到 0 次点击: http://screencast.com/t/d2FB9I4imE
这是我想要查找的条目示例:
{
"_index": "logstash-2016.06.20",
"_type": "logs",
"_id": "AVVtswJxpdkh1tFPP9S5",
"_score": null,
"_source": {
"timestamp": "2016-06-20 14:04:55.6650",
"logger": "xyz",
"level": "debug",
"message": "Processed command service method SearchService.SearchBy in 65 ms",
"exception": "",
"url": "",
"ip": "",
"username": "",
"user_id": "",
"role": "",
"authentication_provider": "",
"application_id": "",
"application_name": "",
"application": "ZBD",
"@version": "1",
"@timestamp": "2016-06-20T12:04:55.666Z",
"host": "0:0:0:0:0:0:0:1"
},
"fields": {
"@timestamp": [
1466424295666
]
},
"sort": [
1466424295666
]
}
我用的是5.0.0-alpha3版本,NEST客户端是alpha2版本atm
这是因为
...
"_type": "logs",
...
当您像您一样进行查询时,它会命中 logstash
而不是 logs
类型,因为 NEST 从通用参数推断类型名称。你有两种选择来解决这个问题。
告诉 NEST 将
Logstash
类型映射到logs
类型 通过在客户端设置此映射来请求 elasticsearch 设置:var settings = new ConnectionSettings() .MapDefaultTypeNames(m => m.Add(typeof(Logstash), "logs"); var client = new ElasticClient(settings);
通过在请求中显式设置类型来覆盖默认行为 参数:
var result = Client.Search<Logstash>(s => s .Type("logs") .Query(p => p.Term("message", "*")));
另请注意,您应该在术语描述符中使用
message
而不是Message
因为您在索引中没有这样的字段。其次,据我所知 术语查询不支持知道通配符。你可能想使用 query string 相反。
希望对您有所帮助。