我对ES还是很陌生,但是经过一段时间的搜索之后,我还没有找到任何示例来说明如何使用术语 vector 设置ES索引以及以后如何通过Java通过文档ID在Java中以编程方式检索它们。
此处描述了JSON变体的运行方式:https://www.elastic.co/guide/en/elasticsearch/reference/2.2/docs-termvectors.html
谁能为此提供Java“翻译”?
目前,我像这样创建索引:
CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(indexName);
createIndexRequestBuilder.execute().actionGet();
并添加如下文档:
XContentBuilder sourceBuilder;
sourceBuilder = XContentFactory.jsonBuilder().startObject()
.field("text", text)
.field("type", "testType");
IndexRequest request = new IndexRequest(indexName, esContentType).source(sourceBuilder);
client.index(request);
这是我可以再次获取文档的方式:
GetResponse response = client.prepareGet(indexName, esContentType, id).execute().actionGet();
任何帮助将不胜感激。
最佳答案
好的,我终于弄清楚了我想要的东西(这个link也很有帮助)。因为这可能对其他人有帮助,所以我想在这里分享:
像这样创建索引:
CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate("indexName");
createIndexRequestBuilder.execute().actionGet();
try {
client.admin().indices().preparePutMapping("indexName").setType("docType")
.setSource(XContentFactory.jsonBuilder().prettyPrint()
.startObject()
.startObject("docType")
.startObject("properties")
.startObject("text").field("type", "string").field("index", "not_analyzed").field("term_vector", "yes").endObject()
.endObject()
.endObject()
.endObject())
.execute().actionGet();
} catch (IOException e) ...
这里是如何从ES检索术语 vector 的方法:
TermVectorsResponse resp = client.prepareTermVectors().setIndex("indexName")
.setType("docType").setId("docId").execute().actionGet();
XContentBuilder builder;
try {
builder = XContentFactory.jsonBuilder().startObject();
resp.toXContent(builder, ToXContent.EMPTY_PARAMS);
builder.endObject();
System.out.println(builder.string());
} catch (IOException e) ...
到目前为止,这对我仍然有效,但是如果有人有其他更好的解决方案,请随时分享。