我有一个索引结构,其中类型是日期,每种类型都有几个文档。我希望获取类型1中存在的所有文档,但类型2中必须缺少这些文档。举个例子:
Type-1 ---> id list = [1,2,3,4,5,6]
Type-2 ---> id list = [2,3,7,8,9]我正在寻找的查询应该只返回id = 1,4,5,6的type-1文档。我使用es-py客户端来实现上述目的。
PS:我总是可以获得分别匹配type-1和type-2的文档,然后对它们进行迭代,以获得我需要的内容。但这是我为了性能而想要避免的解决方案。
发布于 2017-10-06 14:51:40
我的第一个想法是,您的问题是关于两种类型的文档集的差异(减法)。但是正如您所提到的,您不能在两个类型中拥有相同的文档,而在两个文档(_uid = _type#_id)中拥有相同的id
所以您的问题是关于一个类型:您需要join-Query-1中的all _id-Values的补码,它也属于type-2。
为此,您可以使用Parent-Child-Relationship,但在这种情况下,您必须更改索引进程。
不幸的是,elasticsearch中的两种类型之间没有其他的“内置”连接(例如solr会有所帮助)。
您可以通过聚合从连接中获取所有ids,并在没有elasticsearch的情况下构建补集,但这只适用于类型1的小集合。
因此,在我看来,您需要构建自己的类似于ParentJoinPlugin的搜索插件
但请注意:如果类型-1的文档属于另一个分片,那么类型-2的文档即使使用自己的SearchPlugin也不能联接。
https://stackoverflow.com/questions/46598725
复制相似问题