如何使用.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 从通用参数推断类型名称。你有两种选择来解决这个问题。

  1. 告诉 NEST 将 Logstash 类型映射到 logs 类型 通过在客户端设置此映射来请求 elasticsearch 设置:

    var settings = new ConnectionSettings()
        .MapDefaultTypeNames(m => m.Add(typeof(Logstash), "logs");
    
    var client = new ElasticClient(settings);
    
  2. 通过在请求中显式设置类型来覆盖默认行为 参数:

    var result = Client.Search<Logstash>(s => s
        .Type("logs")
        .Query(p => p.Term("message", "*")));
    

    另请注意,您应该在术语描述符中使用 message 而不是 Message 因为您在索引中没有这样的字段。其次,据我所知 术语查询不支持知道通配符。你可能想使用 query string 相反。

希望对您有所帮助。