我有一个索引结构,其中类型是日期,每种类型都有几个文档。我希望所有文档都存在于类型1中,但必须在类型2中不存在。举个例子:
Type-1 ---> id list = [1,2,3,4,5,6]
Type-2 ---> id list = [2,3,7,8,9]
我正在寻找的查询应返回类型1的文档,只有id = [1,4,5,6] 我正在使用es-py客户端来实现上述目的。
PS:我总是可以获得匹配type-1和type-2的文档,然后迭代它们以获得我需要的东西。但这是我想要避免性能的解决方案。
答案 0 :(得分:1)
我的第一个想法是,你的问题是关于两种类型的文件集的差异(减法)。但正如您所提到的,您不能在两种类型中使用相同的文档,而是在两个文档中使用相同的ID (_uid = _type#_id)
所以你的问题是join-Query: 您需要类型1中所有_id-Values的补充,它也属于类型-2。
您可以使用Parent-Child-Relationship,但在这种情况下,您必须更改索引 - 流程。
不幸的是,在elasticsearch中两种类型之间没有其他“内置”连接(例如solr会帮助)。
您可以通过聚合从连接中获取所有ID,并在没有elasticsearch的情况下构建补充,但这仅适用于类型1的小型集。
因此,从我的观点来看,您需要构建自己的搜索插件,类似于ParentJoinPlugin
但请注意:如果type-1的文档属于其他分片,则输入-2即使使用自己的SearchPlugin也无法加入。