在我的ElasticSearch实例中,我在一个索引中有两种类型 . 将它们视为“配置文件”和“ProfileMetadata” . 可能有许多ProfileMetadata项指向单个配置文件 .
配置文件包含基本用户信息说出名字 . ProfileMetadata包含用户的元数据,比如“Tags” .
我希望能够做的是运行一个可能如下所示的查询 . “Firstname NOT tag” . 用户可以在搜索栏中输入此内容 . 它将是一个搜索栏,可以同时搜索这两种类型 .
这两个查询如下:
档案查询
GET _search
{
"query": {
"filtered": {
"query": {
"query_string": {
"fields": [
"PersonalDetail.FirstName",
"PersonalDetail.LastName",
"PersonalDetail.Email"
],
"query": "John Smith NOT tag"
}
}
}
}
}
ProfileMetadata查询
GET _search
{
"query": {
"filtered": {
"query": {
"has_child":
{
"type": "ProfileMetadata",
"query":
{
"query_string": {
"fields": [
"Tags"
],
"query": "John Smith NOT Tag"
}
}
}
}
}
}
}
有没有办法组合这些查询,以便我们得到没有该特定标记的所有John Smiths . 我在C#中使用NEST,目前我正在接受这两个查询(以NEST形式),并在它们之间使用OR,这不能正常工作 . 所以我试图先把它分解成纯粹的ES形式 .
1 回答
也许您只能使用第二个查询,它将返回所有匹配的父文档,然后在其上传递代表您的第一个查询的过滤器 .
通过这种方式,您不必在两个查询之间执行OR,并且可能只使用一个查询过滤器获得性能 .