假设我要搜索两种类型[cars]和[buildings],我希望将结果分开。有没有办法按类型分组结果?
我理解一种简单的方法是分别查询每种类型,但对于其他用例,实际上可能需要一起查询数十种或数百种类型。是否有本地方式或hacky方式(如使用排序)来实现这一目标?
答案 0 :(得分:2)
此类分组行为(目前)在弹性搜索中不可用。这一直是一个长期要求: https://github.com/elasticsearch/elasticsearch/issues/256
有两种方法可以提供帮助,这两种方法都远非完美,但对于某些用例可能还不错。
这是Solr的一个功能,即弹性搜索没有,但我从未尝试过。几年前我在Autonomy IDOL中使用了类似的功能,但性能却很糟糕。
答案 1 :(得分:0)
如果您希望将结果分成多组文档,则必须重新构建文档,因为,elasticsearch专注于查找匹配的文档。您可以通过设计具有子文档的文档来解决这个问题,然后您可以在代表您的类型的父文档上查询匹配项。
答案 2 :(得分:0)
如果你想搜索不同的类型,我想可能会有一些共同的领域(让我们说它是[价格])。然后添加一些像[price_aggregator]这样的不同类型并将其放入字段[type]和[price]中是合理的。然后,您可以轻松地针对一种类型构建查询。这需要一些额外的工作,同时索引和更多的内存来存储索引,但是当你搜索时它的性能非常高。