在Elasticsearch中进行ID搜索

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编写此代码。

请告诉我。谢谢。


很难说不知道你在寻找什么以及你的文档是什么样子。此外,使用get mapping api检查提交的映射长什么样子,以确保它符合您的预期。 - javanna
我想在现有的数据库表中搜索标题、ID和描述。目前,我可以使用术语搜索标题和描述。但是我在查找ID时遇到了麻烦。当我在multiMatchQuery中添加ID字段时,我可以从ID中获得结果,但其他字段没有任何结果。这就是我的问题。 - Soo
@Soo,你能提供一个完整的示例,让我们可以运行并查看发生了什么吗? - imotov
2个回答

3

你可以通过搜索_id字段来查询。因此,curl http://localhost:9200/_search?q=_id:99+AND+_type:series+AND+_index:test 或者 http://localhost:9200/test/series/_search?q=_id:99 就可以完成操作。


3

就像之前的人所说,一个完整的例子会有所帮助。但是假设您正在寻找的文档类型是“系列”:

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

或者更加完整一点:

或许可以更详细一些:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接