我正在尝试使用NEST搜索使用logstash创建的弹性搜索indexex(基本上是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。
答案 0 :(得分:2)
这是因为
...
"_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。
希望它有所帮助。