ElasticSearch Inner Hits для has_parent вложенных Inner Hits - PullRequest
0 голосов
/ 25 апреля 2020

Я искал это и не нашел ничего, что говорит, поддерживается это или нет. В соответствии с документацией Elasti c :

"Внутренние попадания могут быть использованы путем определения определения inner_hits для запроса и фильтра вложенных, has_child или has_parent."

Я хочу использовать inner_hits для вложенного объекта has_parent. Я попробовал это, как показано в примере ниже. Кто-нибудь знает возможно ли это?

Пример сценария (для этого поста я упростил данные и свойства)

Мы сохраняем переводы заголовка и описания задачи как вложенный объект в родительской задаче. Каждый вложенный заголовок имеет ISO-код и переведенный заголовок и описание. В некоторых случаях мы распространяем дочерние задачи среди тысяч пользователей, поэтому не имеет смысла копировать заголовок / описание в каждый дочерний объект.

Пример родительской задачи

{
  "_id": "parenttask_177448",
  "startDate": "2020-05-01T00:00:00",
  "endDate": "2020-05-05T00:00:00",
  "type": "task",
  "taskjoin" : "parenttask",
  "priorityId": 1,
  "translations": [
    {
      "title": "This is a test task",
      "description": "test",
      "localeIsoCode": [
        "en-US"
      ]
    },
    {
      "description": "tester",
      "title": "Ceci est une tâche de test",
      "localeIsoCode": [
        "fr-FR"
      ]
    }
  ]
}

Children Task (s) Пример

{
    "_id": "childtask_12345",
    "taskSubType": "distributed",
    "subtasks": [],
    "startDate": "2020-03-19T00:00:00",
    "endDate": "2020-03-19T00:00:00",
    "taskJoinField": {
      "name": "childtask",
      "parent": "parenttask_177448"
    },
    "assignedUserId": 12345,
    "assignedUserName": "Bob Jones"
}

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

{
  "has_parent": {
    "ignore_unmapped": true,
    "parent_type": "parenttask",
    "query": {
      "nested": {
        "ignore_unmapped": true,
        "inner_hits": {
          "name": "innerhits_task",
          "_source": {
            "includes": [
              "title"
            ]
          }
        },
        "path": "translations",
        "query": {
          "term": {
            "translations.localeIsoCode.keyword": {
              "value": "fr-FR"
            }
          }
        },
        "boost": 1.1,
        "_name": "nested_isocode"
      }
    },
    "score": true,
    "boost": 1.1,
    "_name": "parent_isocode"
  }
}

Соответствующее сопоставление

{
  "thinktime_dev_7003_tasks": {
    "mappings": {
      "properties": {
        "assignedUserId": {
          "type": "long"
        },
        "assignedUserName": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "taskJoinField": {
          "type": "join",
          "eager_global_ordinals": true,
          "relations": {
            "parenttask": "childtask"
          }
        },
        "localeIsoCode": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "locationId": {
          "type": "long"
        },
        "title": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "translations": {
          "type": "nested",
          "properties": {
            "description": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            },
            "image": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            },
            "isPrimary": {
              "type": "long"
            },
            "localeIsoCode": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              },
              "url": {
                "type": "text",
                "fields": {
                  "keyword": {
                    "type": "keyword",
                    "ignore_above": 256
                  }
                }
              }
            }
          },
          "title": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

Я получаю результаты от дочерних задач, но внутренние совпадения не совпадают. Если я перенесу внутренние хиты в has_parent, я получу все переводы обратно.

Мой вопрос: возможно ли выполнение родительских вложенных внутренних хитов в Elasti c? Я удивлен, что не нашел никого, кто пытался сделать это или примеры на Inte rnet. Это похоже на довольно распространенный вариант использования.

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...