我对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) ...

到目前为止,这对我仍然有效,但是如果有人有其他更好的解决方案,请随时分享。

10-08 08:19
查看更多