cod*_*erz 2 elasticsearch jest
我正在使用Jest作为ElasticSearch客户端来搜索文档:
JestClient client = ...;
Search search = ...;
SearchResult searchResult = client.execute(search);
List<Hit<T, Void>> hits = searchResult.getHits(klass);
Run Code Online (Sandbox Code Playgroud)
每个Hit对象看起来像:
{"_index":"some_index","_type":"some_type","_id":"some_id","_score":2.609438,"_source":{"foo1":"bar1","foo2":"bar2"}}
虽然我只能找到hit.source方法,但似乎没有hit.id方法.
将其解析为JSON对象并检索键_id的值是一种方式,但是有没有可以获取文档ID的API?
只是fyi,正在寻找相同的,所以看看Jest源代码并看到Jest确实用"_id"填充hit.source.es_metadata_id(如果它存在)(参见io.searchbox.core.SearchResult,第115行)
所以可以做以下内容作为注释的替代:
List<Hit<Map,Void>> hits = client.execute(search).getHits(Map.class)
Hit hit = hits.get(0)
Map source = (Map)hit.source
String id = (String)source.get(JestResult.ES_METADATA_ID)
Run Code Online (Sandbox Code Playgroud)
似乎无法_id通过JestAPI 获取,必须_id从_source对象获取.
正如@juliendangers所提到的,添加@JestId注释可以实现:
public class MyClass {
@JestId private String documentId;
private String foo;
}
Run Code Online (Sandbox Code Playgroud)
并且必须明确设置文档ID:
myClass.setDocumentId("some_id");
每个Hit对象看起来像:
{"_index":"some_index","_type":"some_type","_id":"some_id","_score":2.609438,"_source":{"foo":"bar","documentId":"some_id"}}
(如果没有明确设置文档ID,则该"documentId":"some_id"对将丢失Hit)
虽然根据我的测试,如果使用继承,必须显式设置父类的文档ID:
public class ParentClass {
@JestId private String documentId;
}
public class MyClass extends ParentClass {
private String foo;
public MyClass() {
super.setDocumentId("some_id");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4639 次 |
| 最近记录: |