Elasticsearch - Как генерировать фасеты для вдвойне вложенных объектов - PullRequest
0 голосов
/ 25 марта 2020

Используя эластичный поиск 7, я пытаюсь построить фасеты для объектов с двойным вложением. Поэтому в приведенном ниже примере я хотел бы извлечь коды идентификаторов исполнителей из поля artistMakerPerson. Я могу извлечь ассоциацию, которая вложена на одной глубине, но не могу получить синтаксис для вложенных вложенных объектов.

Вы можете использовать следующий код в Kibana для воссоздания примера.

Мое сопоставление выглядит следующим образом:

PUT test_artist
{
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
      "properties": {
        "object" : {
          "type" : "text",
          "fields" : {
            "raw" : {
              "type" : "keyword"
            }
          },
          "copy_to" : [
            "global_search"
          ]
        },
        "uniqueID" : {
          "type" : "keyword",
          "copy_to" : [
            "global_search"
          ]
        },
        "artistMakerPerson" : {
          "type" : "nested",
          "properties" : {
            "association" : {
              "type" : "keyword"
            },
            "name" : {
              "type" : "nested",
              "properties" : {
                "id" : {
                  "type" : "keyword"
                },
                "text" : {
                  "type" : "text",
                  "fields" : {
                    "raw" : {
                      "type" : "keyword"
                    }
                  },
                  "copy_to" : [
                    "gs_authority"
                  ]
                }
              }
            },
            "note" : {
              "type" : "text"
            }
          }
        }
      }
    }
}

Индексируйте документ с помощью:

PUT /test_artist/_doc/123
{
  "object": "cup",
  "uniquedID": "123",
  "artistMakerPerson" : [
              {
                "name" : {
                  "text" : "Johann Kandler",
                  "id" : "A6734"
                },
                "association" : "modeller",
                "note" : "probably"
              },
              {
                "name" : {
                  "text" : "Peter Reinicke",
                  "id" : "A27702"
                },
                "association" : "designer",
                "note" : "probably"
              }
            ]
} 

Я использую этот запрос для извлечения аспектов или агрегатов для artistMakerPerson.association

GET test_artist/_search
{
  "size": 0,
  "aggs": {
    "artists": {
      "nested": {
        "path": "artistMakerPerson"
      },
      "aggs": {
        "kinds": {
          "terms": {
            "field": "artistMakerPerson.association",
            "size": 10
          }
        }
      }
    }
  }
}

и меня награждают ведрами для дизайнера и модельера, но я ничего не получаю, когда пытаюсь вытащить более глубокий идентификатор художника:

GET test_artist/_search
{
  "size": 0,
  "aggs": {
    "artists": {
      "nested": {
        "path": "artistMakerPerson"
      },
      "aggs": {
        "kinds": {
          "terms": {
            "field": "artistMakerPerson.name.id",
            "size": 10
          }
        }
      }
    }
  }
}

Что я делаю не так?

1 Ответ

2 голосов
/ 25 марта 2020

Изменить путь с artistMakerPerson на artistMakerPerson.name.

GET test_artist/_search
{
  "size": 0,
  "aggs": {
    "artists": {
      "nested": {
        "path": "artistMakerPerson.name"
      },
      "aggs": {
        "kinds": {
          "terms": {
            "field": "artistMakerPerson.name.id",
            "size": 10
          }
        }
      }
    }
  }
}
...