Java 搜索未返回预期结果
我正在尝试连接到elasticsearch,并在6.3.2版本中进行一些基本查询 我正在尝试的代码如下:Java 搜索未返回预期结果,java,
elasticsearch,Java,
elasticsearch,我正在尝试连接到elasticsearch,并在6.3.2版本中进行一些基本查询 我正在尝试的代码如下: RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 30100, "http"))); SearchRequest sr = new SearchRequest(INDEX); sr.indicesOptions(IndicesOptions.le
RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 30100, "http")));
SearchRequest sr = new SearchRequest(INDEX);
sr.indicesOptions(IndicesOptions.lenientExpandOpen());
SearchSourceBuilder ssb = new SearchSourceBuilder();
sr.source(ssb);
MatchQueryBuilder builder = QueryBuilders.matchQuery("logLevel.keyword", "ERROR");
QueryBuilder qb = QueryBuilders.boolQuery().must(builder);
ssb.query(qb);
SearchResponse response = null;
try {
response = client.search(sr);
System.out.println("total hits ::: " + response.getHits().getTotalHits());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(response);
更新
正如所建议的,我现在才使用这个查询。我从API中尝试了构建查询,看到了结果,但出于某种原因,response.getHits().getTotalHits()
返回零。生成的查询如下所示,并给出了kibana中的预期结果,即总计数为1:
GET /_search
{
"from": 0,
"query": {
"bool": {
"must": [
{
"match": {
"logLevel.keyword": {
"query": "ERROR",
"operator": "OR",
"prefix_length": 0,
"max_expansions": 50,
"fuzzy_transpositions": true,
"lenient": false,
"zero_terms_query": "NONE",
"auto_generate_synonyms_phrase_query": true,
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
}
}
我缺少restclient的一些配置?我不明白为什么您需要发布的查询中的所有部分(如max_扩展等)。如果您只需要符合条件的文档计数,那么像下面这样的简单查询应该可以完成这项工作
curl -XGET "http://localhost:9200/index_name/_search" -d'
{
"size": 0,
"query": {
"bool": {
"must": [
{
"match": {
"logLevel": "ERROR"
}
},
{
"range": {
"date": {
"gte": "enter_date_here"
}
}
}
]
}
}
}'
参考资料:如果您只需要计算文档的数量,而不需要对任何字段进行分组,您只需使用所需的过滤器运行查询即可?我不明白你为什么需要聚合。日期范围也可以在查询本身中指定,除非您希望计数按特定的日期间隔分组哦!好的,我是这个API的新手,你能提供一个示例吗?或者你能给我指一些参考例子,如你所说的查询本身吗?问题是新旧APIscheck中存在很多混淆:您需要构建一个查询,其中在
log\u级别
上使用术语过滤器,在日期字段上使用范围过滤器。将结果的大小设置为0,因为您只需要计数。我认为这也优化了查询。更改了我现在使用的代码,并在代码中进行了更新,我看到0个点击,理想情况下我应该得到1您也需要发布索引映射curl-XGET localhost:9200/index_name/_mappings?pretty=true
从DSL开始,您所放置的并不是我想要的。重要的是,生成的DSL工作得非常好,但我的代码返回0次点击。我肯定我错过了什么。我完全不知道我是否应该为搜索创建一个saperate索引,我想你需要更新你的问题。你想要实现什么?根据我在您更改问题之前收集到的信息,您希望找到在某个日期范围内具有loglevel:error的文档数。如果我错了,请告诉我这是正确的,但请同时查看标题,因为我无法获取我应该获取的正确数量的记录。任何要求我都得零分。由于TransportClient
将被弃用,我计划使用rest客户端。它是正确的,我查询的方式是错误的,我已经修复了,但是输出没有改变。你能粘贴你得到的响应和elasticsearch中应该符合你的条件的文档吗?我已经在聊天室中添加了完整的信息。。。谢谢