使用ElasticsearchSource查询ES返回0结果的格式问题
问题原因
你的Java代码传入的查询参数格式存在两处错误,导致查询无法匹配到结果:
- 首先,你拼接的查询字符串不是合法JSON结构:缺少最外层的配对大括号,无法被Elasticsearch正常解析。
- 其次,查询结构缺少外层
query字段包裹,和你在Dev Tools中验证可用的查询结构不匹配,ES无法识别到你定义的range过滤条件。
你当前代码中实际传入的查询片段如下,既无最外层大括号,也无query包裹:
"range": { "timestamp": { "gte": 1656055230028, "boost": 2.0 } }
修复方案
将传入的查询字符串修改为和Dev Tools中查询结构一致的合法JSON即可,修正后的代码如下:
Source<ReadResult<Map<String, Object>>, NotUsed> source = ElasticsearchSource.create( constructElasticsearchParams("data", "_doc", ApiVersion.V7), "{" + " \"query\": {" + " \"range\": {" + " \"timestamp\": {" + " \"gte\": 1656055230028," + " \"boost\": 2.0" + " }" + " }" + " }" + "}", sourceSettings);
如果使用的Alpakka Elasticsearch连接器版本要求第二个参数仅传入query内部的查询条件,也至少要给range片段补上最外层大括号,写法如下:
"{" + " \"range\": {" + " \"timestamp\": {" + " \"gte\": 1656055230028," + " \"boost\": 2.0" + " }" + " }" + "}"
优先使用第一种和Dev Tools验证过的结构完全一致的写法,能保证查询逻辑和你手动验证的效果完全对齐。
内容的提问来源于stack exchange,提问作者blue-sky
相关产品推荐
相关产品推荐

