Elasticsearch API:SearchQuery 和 SearchResponse 之间的区别?

Elasticsearch API: difference between SearchQuery and SearchResponse?

在我的 Spring-Data-Elasticsearch 应用程序中,我尝试使用 SearchQuery 根据一些给定的 QueryBuilder 和 FilterBuilder 在 Elasticsearch 中进行搜索。

但是,对我来说,Elasticsearch docs talk about SearchResponse 似乎与 SearchQuery 的工作相同。

我不明白 SearchQuery 和 SearchResponse 之间的区别。 有人可以指出区别吗?

如果您将查询对象传递给 elasticsearch 客户端并执行查询,您会得到响应。 响应类型取决于查询类型。

executed SearchQuery object -> SearchResponse object
executed IndexQuery object -> IndexResponse object

等等...

在您 link 的代码片段中,SearchQuery 对象是使用 prepareSearch 方法构建的。然后由客户端执行。

SearchResponse response = 
  // Query creation part
  client.prepareSearch("index1", "index2")
        .setTypes("type1", "type2")
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(QueryBuilders.termQuery("multi", "test"))             
        .setPostFilter(FilterBuilders.rangeFilter("age").from(12).to(18))   
        .setFrom(0).setSize(60).setExplain(true)

        //query execution part
        .execute()
        .actionGet();

搜索查询是您发送给 Elastic 的查询,搜索响应是 Elasticsearch 对该查询的响应。

例如,这可能是您的查询:

POST /your_index/_search
{
  "query": {
    "term": {
      "available": {
        "value": true
      }
    }
  }

以及来自 ES 的可能查询响应:

{
   "took": 99,
   "timed_out": false,
   "_shards": {
      "total": 1,
      "successful": 1,
      "failed": 0
   },
   "hits": {
      "total": 58188,
      "max_score": 0.99998283,
      "hits": [
         ...
      ]
   }
}