ElasticSearch中的分层搜索



如果重复这个问题,很抱歉。我确实检查了一种叫做亲子关系的东西,但想确认它是否对我的用例有帮助。

{
"person": {
"name": "Bob Smith",
"phones": [
{
"type": "MOB",
"number": 12345
},
{
"type": "HOME",
"number": 54321
}
],
"email": "bob@smith.com"
}
}

如果这是我在ElasticSearch数据库中的文档,并且我正在搜索:

Name: Bob Smith
PhoneType: MOB
PhoneNumber: 12345
Email: bob@smith.com

我显然会得到正确的文件。但如果我的搜索是:

Name: Bob Smith
PhoneType: MOB
PhoneNumber: 73827
Email: bob@smith.com

我不会得到任何文件,但我可以取回一些信息,比如"找到了电子邮件的人,但没有找到电话"吗?

我想我可以通过在第一个请求中只传递姓名,在第二个请求中传递姓名+电子邮件,在第三个请求中发送姓名+电话(类型和号码(,以及姓名+电子邮件+电话(型号和号码(来进行多搜索。

但我想知道这是否是唯一的方法。

谢谢,阿伦

您可以发送一个should类型的布尔查询,该查询包含四个子句,每个子句对应要检查的字段(NamePhoneTypePhoneNumberEmail(。这样,如果你的任何条款被点击,你就会得到一份文件。命中次数越多,命中分数就越高。

尝试了@glencota的建议,但它并不一定能告诉我匹配的数据在哪个级别/过滤。由于我们的API需要通知我们的客户"找到了电子邮件中的人,但没有找到电话",我们将无法在Elastic中使用布尔选项。

我们将把它作为多搜索用例的一部分来实现。

谢谢@glencota的光临,先生。

最新更新