MarkLogic - Query Options - сортировка по нескольким свойствам - PullRequest
0 голосов
/ 04 сентября 2018

Я создал фасет, используя параметры запроса, как показано ниже.

"constraint": [
  { 
    "name": "Full Name",
    "range": 
      {
        "type": "xs:string",
        "element": {"name": "Full Name" }
      }
  }
]

Я вижу, что свойства "Полное имя" возвращаются в отсортированном порядке по свойству "фасет", а также мы можем контролировать порядок сортировки (по возрастанию или по убыванию).

"facets": {
  "Full Name": {
    "type": "xs:string",
    "facetValues": [
      {
        "name": "John H",
        "count": 1,
        "value": "John H"
      },
      {
        "name": "Mary",
        "count": 1,
        "value": "Mary"
      }
    ]
  }
}

Но мое требование - сортировать имена сначала по ролям, а затем по именам. Например, Джон - это HR, а Мэри - бухгалтер, поэтому Мэри должна предстать перед Джоном, поскольку ее роль (бухгалтер) предшествует роли Джона (HR) в порядке сортировки. Есть ли способ сортировки индексированных ограничений по дополнительным свойствам?

Один из способов, который я слышал, - создать составное свойство (роль + имя) и создать индекс диапазона для составного свойства. Это предложенный подход?

1 Ответ

0 голосов
/ 08 сентября 2018

Грани строятся из индекса диапазона. Индекс диапазона является эквивалентом одного столбца или массива атомарных значений. Фасет не может отсортировать значения в индексе диапазона по другим значениям в исходных документах.

Как вы предлагаете, одна альтернатива - объединить все значения, необходимые для сортировки.

В MarkLogic 9 другой альтернативой может быть использование TDE для создания многостолбцового индекса и использование Optic API для сортировки по одному столбцу, но для возврата значений или группировки по другому столбцу.

TDE и Optic не имеют никакой интеграции с API поиска, поэтому вам необходимо собрать страницу результатов поиска отдельно от фасетного анализа для всего набора сопоставленных документов.

Надеюсь, что поможет,

...