Elasticsearch 6.1 Java API搜索问题

时间:2018-01-03 06:59:09

标签: java elasticsearch elasticsearch-6

我正在使用ES-6.1和相应的java版本的api。我能够使用java API索引数据。我通过kibana验证了这一点。所有映射都已正确保存,但在我尝试搜索时出现错误。即使是最基本的搜索也会给我一个空集。

// client is a reference to the TransportClient instance
SearchResponse searchResponse = this.client.prepareSearch(index).get().

当我尝试通过getFields()获取字段并进一步执行getField(key)时,我得到一个空指针异常。我尝试了故障排除,并在响应中看到没有返回任何对象。以下是我正在进行的基本搜索。

// index is the index I am interested to search under.
SearchResponse searchResponse = this.client.prepareSearch(index).get();

当我尝试将代码从1.7.3 Java API迁移到最新版本时,我看到了这个问题。早些时候,我们的实施没有发现任何问题。

我已经阅读了很多关于已经遇到的变化的文章,但没有找到适用于我的案例的解决方案。

我已使用存储的映射设置每个属性重新索引数据。我仍然没有得到我感兴趣的字段的响应。字段Keyset仍然是空值

以下是映射样本。

"street": {
    "type": "text",
    "store": true
},
"country": {
    "type": "text",
    "store": true
},
"city": {
    "type": "text",
    "store": true
}
---------------Some more fields--------------

从调试器附加我的变量的屏幕截图。     }

以下是我在排除故障时获得的每次点击的响应。我在该索引中获得了正确的点击次数。从调试器附加我的变量的屏幕截图。 hits 是包含来自以下代码段的响应的变量。

hits = searchResponse.getHits()

Debugger log for the values "hits" hold

感谢您的帮助。

-Ajit

1 个答案:

答案 0 :(得分:0)

我发现问题在于搜索方法。

与以前的版本不同,新版本将以不同的方式获取地图中的匹配。

//in previous version (1.7.3)
hit.getFields() 
// in new version (6.1.0)
hit.getSourceAsMap()

此外,我们可以按照我们之前的方式对响应进行反序列化。

这是弹性搜索论坛的link,其中包含所有细节。谢谢你的帮助。

-Ajit