【问题标题】:Elasticsearch search index limit by typeElasticsearch 搜索索引限制(按类型)
【发布时间】:2016-04-10 20:55:08
【问题描述】:

我是 elasticsearch 新手,我正在尝试使用 elasticsearch,搜索 api。

我的索引结构由树类型组成。说foobarbaz。所有树类型都具有相同的“名称”键和字符串值,我想要实现的是搜索所有类型,但只检索每种类型的最多 5 个项目。

我认为我在 Multi Search API 方面取得了成功;我想知道我是否可以使用单个查询来保持相同的功能(以获得更好的性能)。

我尽可能多地搜索互联网。但是,我找不到更好的方法。 stackoverflow 中有一个类似问题的答案,它也提供了多搜索 api;但是已经两岁了,并且有一个问题。我觉得再问有意义。

这是我目前正在使用的 msearch:

{"type" : "foo"}
{"query" : {"match": {"name": "bar"}}, "terminate_after": 5}
{"type" : "bar"}
{"query" : {"match": {"name": "bar"}}, "terminate_after": 5}
{"type" : "baz"}
{"query" : {"match": {"name": "bar"}}, "terminate_after": 5}

如果我编写一个最多包含 4 个结果的查询,我认为这将检查所有存储 3 次。

任何帮助表示赞赏。

【问题讨论】:

  • 如果它有效,您想要更改多搜索查询的根本原因是什么?是不是太慢了?
  • @Val 你知道,这是一个工程问题。我正在尽我所能进行优化。
  • 很公平,我只是好奇 ;-)

标签: performance elasticsearch types limit


【解决方案1】:

使用_type 进行聚合,然后从每个中找到前 5 个:

GET /index/_search 
{
"size": 0,
"query": {
  "match": {
     "name": "bar"
   }
},
"aggs": {
  "group_by_type": {
     "terms": {
        "field": "_type"
     },
     "aggs": {
        "top_5_aggregation": {
            "top_hits":{
                "size" :5
             }
          }
       }
     }
  }  
}

【讨论】:

  • 非常好,干净,“复制 - 粘贴 - 看它工作”的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2016-12-29
相关资源
最近更新 更多