Elasticsearch查询多种类型并按类型分组?

时间:2014-04-25 18:35:05

标签: lucene elasticsearch

假设我要搜索两种类型[cars]和[buildings],我希望将结果分开。有没有办法按类型分组结果?

我理解一种简单的方法是分别查询每种类型,但对于其他用例,实际上可能需要一起查询数十种或数百种类型。是否有本地方式或hacky方式(如使用排序)来实现这一目标?

3 个答案:

答案 0 :(得分:2)

此类分组行为(目前)在弹性搜索中不可用。这一直是一个长期要求: https://github.com/elasticsearch/elasticsearch/issues/256

有两种方法可以提供帮助,这两种方法都远非完美,但对于某些用例可能还不错。

  • 客户端聚合。请求比您计划显示的结果更多的结果,然后将其打包。
  • 使用多重查询。这使您可以在一个批处理中轻松传递一些查询,但如果查询数量变大,则会出现潜在的扩展问题。

这是Solr的一个功能,即弹性搜索没有,但我从未尝试过。几年前我在Autonomy IDOL中使用了类似的功能,但性能却很糟糕。

答案 1 :(得分:0)

如果您希望将结果分成多组文档,则必须重新构建文档,因为,elasticsearch专注于查找匹配的文档。您可以通过设计具有子文档的文档来解决这个问题,然后您可以在代表您的类型的父文档上查询匹配项。

答案 2 :(得分:0)

如果你想搜索不同的类型,我想可能会有一些共同的领域(让我们说它是[价格])。然后添加一些像[price_aggregator]这样的不同类型并将其放入字段[type]和[price]中是合理的。然后,您可以轻松地针对一种类型构建查询。这需要一些额外的工作,同时索引和更多的内存来存储索引,但是当你搜索时它的性能非常高。