elasticsearch 如何作为术语查询的一部分查询对象数组,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何作为术语查询的一部分查询对象数组,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如何作为术语查询的一部分查询对象数组

elasticsearch 如何作为术语查询的一部分查询对象数组,elasticsearch,nest,elasticsearch,Nest,我正在使用elasticsearch 5.5.0 Im我的索引我有json中的吸引部分类型的数据,如图所示: "directions": "Exit the M4 at Junction 1", "phoneNumber": "03333212001", "website": "https://www.londoneye.com/", "postCode": "SE1 7PB", "categories": [ {

我正在使用elasticsearch 5.5.0

Im我的索引我有json中的吸引部分类型的数据,如图所示:

"directions": "Exit the M4 at Junction 1",
      "phoneNumber": "03333212001",
      "website": "https://www.londoneye.com/",
      "postCode": "SE1 7PB",
      "categories": [
        {
          "id": "ce4cf4d0-6ddd-49fd-a8fe-3cbf7be9b61d",
          "name": "Theater"
        },
        {
          "id": "5fa1a3ce-fd5f-450f-92b7-2be6e3d0df90",
          "name": "Family"
        },
        {
          "id": "ed492986-b8a7-43c3-be3d-b17c4055bfa0",
          "name": "Outdoors"
        }
      ],
      "genres": [],
      "featuredImage": "https://www.daysoutguide.co.uk/media/1234/london-eye.jpg",
      "images": [],
      "region": "London",
 var query2 = Query<Attraction>.Bool(
            bq => bq.Filter(
                fq => fq.Terms(t => t.Field(f => f.Region).Terms(request.Region.ToLower())),
                fq => fq.Terms(t => t.Field(f => f.Categories).Terms(request.Category.ToLower())))
    {
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "region": [
              "london"
            ]
          }
        },
        {
          "terms": {
            "categories": [
              "family"
            ]
          }
        }
      ]
    }
  }
}
我的下一个查询如下所示:

"directions": "Exit the M4 at Junction 1",
      "phoneNumber": "03333212001",
      "website": "https://www.londoneye.com/",
      "postCode": "SE1 7PB",
      "categories": [
        {
          "id": "ce4cf4d0-6ddd-49fd-a8fe-3cbf7be9b61d",
          "name": "Theater"
        },
        {
          "id": "5fa1a3ce-fd5f-450f-92b7-2be6e3d0df90",
          "name": "Family"
        },
        {
          "id": "ed492986-b8a7-43c3-be3d-b17c4055bfa0",
          "name": "Outdoors"
        }
      ],
      "genres": [],
      "featuredImage": "https://www.daysoutguide.co.uk/media/1234/london-eye.jpg",
      "images": [],
      "region": "London",
 var query2 = Query<Attraction>.Bool(
            bq => bq.Filter(
                fq => fq.Terms(t => t.Field(f => f.Region).Terms(request.Region.ToLower())),
                fq => fq.Terms(t => t.Field(f => f.Categories).Terms(request.Category.ToLower())))
    {
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "region": [
              "london"
            ]
          }
        },
        {
          "terms": {
            "categories": [
              "family"
            ]
          }
        }
      ]
    }
  }
}
这不会返回任何结果。如果我去掉分类,我会得到结果。所以我尝试对类别进行术语过滤,类别是一个对象数组。看起来我的查询做错了。有人对如何让它工作有任何提示吗

问候


Ismail

您仍然可以通过以下方式使用强类型属性访问:

t.Field(f=>f.Categories.First().Name)

NEST
的属性推断器将读取
.First()
并生成
类别。name


t.Field(f=>f.Categories[0].Name)
也可以使用。

您仍然可以通过以下方式使用强类型属性访问:

t.Field(f=>f.Categories.First().Name)

NEST
的属性推断器将读取
.First()
并生成
类别。name


t.Field(f=>f.Categories[0].Name)
也可以使用。

我想您应该指定字段的完整路径:
Categories.Name
。这应该行得通。您应该使用嵌套查询,您将在中找到用法。rob,不确定如何使用嵌套客户端?我知道如何处理这件事DSL@Ismail是的,这是NEST client的示例;)@因此,将(f=>f.Categories)替换为(“Categories.name”)?我想您应该指定字段的完整路径:
Categories.name
。这应该行得通。您应该使用嵌套查询,您将在中找到用法。rob,不确定如何使用嵌套客户端?我知道如何处理这件事DSL@Ismail是的,这是NEST client的示例;)@因此,将(f=>f.Categories)替换为(“Categories.name”)??