Elastic Search-如何使用AND查询一对多表联接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elastic Search-如何使用AND查询一对多表联接相关的知识,希望对你有一定的参考价值。

我是弹性搜索的新手。我是否可以通过弹性搜索实现以下查询?如果是这样,查询字符串应该是什么样?

输入:类似sql的句子。句子为:“(A和B)以及(C和D)”

A,B,C,D是字段比较。例如,A->“职员名称”字段的值等于“约翰”。

例如,有2张桌子。员工表和任务表。

员工表

StaffName:John

职员名称:玛丽

任务表

[TaskName:JohnTaskA,StaffName:John

[TaskName:JohnTaskB,StaffName:John

[TaskName:MaryTaskA,StaffName:Mary

因此,在传统DB中,John可以以一对多关系链接到JohnTaskA和JohnTaskB。

我对查询行为(A和B)以及(C和D)的预期行为如下:

(A和B)查询之后,假定仅返回一个记录。约翰-> JohnTaskA

并且(C和D)查询之后,假定仅返回一个记录。约翰-> JohnTaskB

然后,以下查询(A和B)和(C和D)应该不返回任何值,因为“ John-> JohnTaskA”实际上与“ John-> JohnTaskB”不匹配。

相反,如果是(C和D)查询,则只返回一条记录作为John-> JohnTaskB

然后进行以下查询(A和B)和(C和D)可以将记录John返回。

但是我无法通过弹性搜索查询实现这种预期的行为。在我的第一次尝试中,我使用nestedQuery处理任务表的查询,并且可以成功地在嵌套表中实现多列检查。

例如,如果A-> Task.TaskName = JohnTaskA,B-> Task.StaffName = John,则A和B可以返回记录。

但是如果A-> Task.TaskName = JohnTaskA,B-> Task.StaffName = Mary,则A和B无法返回任何记录。

但是我发现是否在这种情况下

((A和B)和(C和D)] >>

我无法使用中间的“和”将两个嵌套的查询结果链接在一起。它不会返回预期的行为。

如果无法更改SQL语句,请问弹性搜索如何实现此查询?还是我需要使用其他方式,例如亲子关系?

感谢您的帮助!

我是弹性搜索的新手。我是否可以通过弹性搜索实现以下查询?如果是这样,查询字符串应该是什么样?输入:类似sql的句子。句子为:“((A和...

答案

我想通过说弹性搜索不是RDMS作为开头,您不应该这样使用它。在Elasticsearch中,对数据进行非规范化要好得多(查询性能,复制性能,写入性能等)。

以上是关于Elastic Search-如何使用AND查询一对多表联接的主要内容,如果未能解决你的问题,请参考以下文章

如何进行地理距离查询仅返回我尚未“喜欢”的结果、Elastic Search、Dynamo DB

是否可以使用特征向量查询 Elastic Search?

使用 Elastic Search 查询 CouchDB 中的数组内部

elastic search query string

elastic search 常用查询

Elastic Search之布尔查询