4

现在我想在字段中搜索 id。

builder.startObject().startObject(TYPE_SERIES).startObject("properties");

    builder.startObject(ID)
            .field("type", "long")
            .field("store", "yes")
            .field("index", "analyzed")
            .field("analyzer", "test_analyzer")
            .endObject();

    builder.startObject(TITLE)
            .field("type", "string")
            .field("store", "yes")
            .field("index", "analyzed")
            .field("analyzer", "test_analyzer")
            .field("boost", "10")
            .endObject();

我试图像这样搜索ID:

.setQuery(QueryBuilders.multiMatchQuery(query, 
                       ID, TITLE))

顺便说一句,我可以用 id 得到结果,而不是用标题搜索。我只是用 id 搜索以获得结果。

所以我改变了这个。我使用了 MultiSearchResponse,以便尝试执行两个子查询。

一个是

.setQuery(QueryBuilders.idsQuery(TYPE).ids(query))

另一个是

.setQuery(QueryBuilders.multiMatchQuery(query, 
                                            TITLE,DESCRIPTION))

不幸的是,我只得到带有标题或描述的结果。如果我搜索 ID,我无法得到任何结果。

================我想这样执行

curl -XGET localhost:9200/test/series/99

我想用 ID 获得结果。不幸的是,我不太清楚如何使用 JAVA API 制作这段代码。

请告诉我。谢谢。

4

2 回答 2

3

您可以在其中搜索一个 _id 字段。因此,curlhttp://localhost:9200/_search?q=_id:99+AND+_type:series+AND+_index:testhttp://localhost:9200/test/series/_search?q=_id:99应该可以解决问题。

于 2013-07-18T13:37:12.087 回答
3

正如前面的人所说,一个完整的例子会有所帮助。但是,假设您要查找的文档类型是“系列”:

.setQuery(QueryBuilders.idsQuery("series").addIds("99"));

或者更完整一点:

SearchResponse esResponse = esClient.prepareSearch("test")
                .setQuery(QueryBuilders.idsQuery("series").addIds("99"))
                .execute().actionGet();
于 2015-07-29T22:46:07.560 回答