Id在elasticsearch中搜索

时间:2013-07-17 13:25:43

标签: java elasticsearch

现在我想在字段中搜索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创建此代码。

请告诉我。谢谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

就像之前人们所说的那样,一个完整的例子会有所帮助。但是,让我们说你正在寻找的文件类型是"系列":

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

或者更完整:

SearchResponse esResponse = esClient.prepareSearch("test")
                .setQuery(QueryBuilders.idsQuery("series").addIds("99"))
                .execute().actionGet();