Как правильно запрашивать родительские и дочерние документы в SOLR? - PullRequest
1 голос
/ 08 марта 2019

Структура индекса:

{
  "documents": [
    {
      "doc_type": [
        "dataset"
      ],
      "title": [
        "document_title"
      ],
      "id": [
        1234
      ],
      "_childDocuments_": [
        {
          "parent_id": [
            1234
          ],
          "doc_type": [
            "column"
          ],
          "id": [
            789
          ],
          "attr_nm": [
            "child_field_value"
          ],
        },
      ]
    }
  ]
}

Всякий раз, когда выполняется поиск / запрос, я всегда хочу вернуть родительский документ.Например, если я ищу 'child_field_value', я хочу получить родительский документ, а пользователь никогда не увидит дочерние документы.

Я могу заставить это работать для родителей.Например, если я ищу «document_title», я могу получить приведенную выше структуру, используя следующую настройку:

q=document_title
fl=*,[child parentFilter=doc_type:dataset]
qf=title^200 attr_nm

Если я попробую это с помощью ключевого слова запроса «child_field_value», я получу странную структуру, такую ​​как:

"response": {
  "numFound":2,
  "start":0,
  "docs":[
    {
      "parent_id":"1234",
      "doc_type":"column",
      "id":"123",
      "attr_nm":"child_field_value",
    },
    {
      "parent_id":"1234",
      "doc_type":"column",
      "id":"456",
      "attr_nm":"child_field_value",
      "_childDocuments_":[{
        "parent_id":"1234",
        "doc_type":"column",
        "id":"124",
        "attr_nm":"child_field_value",
      }]
    }
  ]
}

Как я могу гарантировать, что всегда получаю желаемые результаты даже при поиске в дочернем поле какого-либо значения?

...