首页 文章

ElasticSearch HasChild查询

提问于
浏览
0

在我的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 回答

  • 0

    也许您只能使用第二个查询,它将返回所有匹配的父文档,然后在其上传递代表您的第一个查询的过滤器 .

    通过这种方式,您不必在两个查询之间执行OR,并且可能只使用一个查询过滤器获得性能 .

相关问题