2016-02-06 3 views
2

Я пишу Rest Extension для поиска, и это принимает параметры, где искать в документе JSON Nested. Я смог это сделать, написав пользовательское ограничение и с этим пользовательским ограничением, затем проанализировав текст поиска и построив запрос.Пользовательский порядок сортировки в параметрах поиска Xquery

Можем ли мы сделать то же самое для порядка сортировки? Кстати, я имею в виду, что я строю порядка сортировки для параметров поиска на основе параметров, которые получают прошло ..

Я видел в одном из примеров, где сделать следующее

let $options := 
<search:options> 
    <search:operator name="sort"> 
    <search:state name="relevance"> 
     <search:sort-order> 
     <search:score/> 
     </search:sort-order> 
    </search:state> 
    <search:state name="year"> 
     <search:sort-order direction="descending" type="xs:gYear" 
      collation=""> 
     <search:attribute ns="" name="year"/> 
     <search:element ns="http://marklogic.com/wikipedia" 
      name="nominee"/> 
     </search:sort-order> 
     <search:sort-order> 
     <search:score/> 
     </search:sort-order> 
    </search:state> 
    </search:operator> 
</search:options> 
return 
search:search("lange sort:year", $options) 

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

Возможно ли это?

ответ

5

Ну, пример, который вы даете, вы упоминаете, что это своего рода жесткий код. В этом состоянии это просто XML. Вы можете использовать логику программирования до этого шага, чтобы решить элементы и упорядочить порядок и построить свой XML соответственно. Ниже приведенный ниже пример делает сортировку восходящей или нисходящей для элемента title. Этот крошечный пример поможет вам понять, что вы можете сделать в более широком масштабе.

let $sort-direction := "descending" 

let $options := 
    <search:options> 
     <search:operator name="sort"> 
     <search:state name="relevance"> 
      <search:sort-order> 
      <search:score/> 
      </search:sort-order> 
     </search:state> 
     <search:state name="year"> 
      <search:sort-order direction="{$sort-direction}" type="xs:gYear" 
       collation=""> 
      <search:attribute ns="" name="year"/> 
      <search:element ns="http://marklogic.com/wikipedia" 
       name="nominee"/> 
      </search:sort-order> 
      <search:sort-order> 
      <search:score/> 
      </search:sort-order> 
     </search:state> 
     </search:operator> 
    </search:options> 
    return 
    search:search("lange sort:year", $options) 
+0

См [Определение динамических параметров запроса с комбинированным Query] (http://docs.marklogic.com/guide/rest-dev/search#id_69918) более о задании динамических параметров поиска. Это позволяет вашему среднему уровню более контролировать процесс поиска. –

Смежные вопросы