我正在與search-api
一起工作,並想知道如何在運行中操作搜索結果?我需要這樣的事情:在Marklogic中使用search-api執行結果集操作
我需要根據一些條件對結果集進行排序,如果條件的值爲null,那麼我應該應用一些任意的整數值,這樣我就不會得到xdmp:cast
異常。
請幫忙。
問候 阿米特
我正在與search-api
一起工作,並想知道如何在運行中操作搜索結果?我需要這樣的事情:在Marklogic中使用search-api執行結果集操作
我需要根據一些條件對結果集進行排序,如果條件的值爲null,那麼我應該應用一些任意的整數值,這樣我就不會得到xdmp:cast
異常。
請幫忙。
問候 阿米特
每一次重新排序將需要一個新的API調用 - search:search
或search:resolve
。您可以爲排序鍵適當地設置搜索選項。
修復XDMP-CAST
異常需要修復基礎數據類型問題。什麼是完整的錯誤信息?
編輯:正如你所寫的,你可以使用類似的東西來處理非整數值。
for $each in $x/ArticleSequenceNumber
order by
if ($each castable as xs:integer) then xs:integer($each)
else 0
return $each
但是搜索API沒有處理那種事情。搜索API是圍繞大型數據庫設計的,搜索結果太大而無法一次裝入內存。所以它期望有可用於排序的範圍索引。反過來,範圍索引依賴於具有乾淨的輸入數據。
通常的解決方案是清理您的ArticleSequenceNumber
元素,如果您想將其用作搜索API的排序關鍵字。當元素爲空時,給它一個虛擬的值或完全從XML中刪除它。
但是,http://markmail.org/message/53pn6xioluwxdx4o可能會有所幫助。這裏的想法是將值視爲字符串而不是數字,但使用數字排序對它們進行排序。
for $each in $x/ArticleSequenceNumber
order by $each collation "http://marklogic.com/collation//MO"
return $each
您應該能夠在搜索約束中指定相同的排序規則。相應的範圍索引將是具有相同排序規則的字符串索引。
xquery版本'1。0毫升'; 讓$ X:=
xquery version '1.0-ml';
let $x := <root>
<ArticleSequenceNumber/>
<ArticleSequenceNumber>1</ArticleSequenceNumber>
<ArticleSequenceNumber>5</ArticleSequenceNumber>
<ArticleSequenceNumber>10</ArticleSequenceNumber>
<ArticleSequenceNumber>63</ArticleSequenceNumber>
<ArticleSequenceNumber>54</ArticleSequenceNumber>
<ArticleSequenceNumber>19</ArticleSequenceNumber>
<ArticleSequenceNumber>21</ArticleSequenceNumber>
<ArticleSequenceNumber>29</ArticleSequenceNumber>
<ArticleSequenceNumber>11</ArticleSequenceNumber>
</root>
for $each in $x/ArticleSequenceNumber
order by xs:integer($each)
return $each
這是示例調用,我想處理空值,它應該出現在結果的底部,我希望它使用seacrh-api進行排序, 請幫忙。 –
嘗試使用空的最少(http://www.w3.org/TR/xquery/#id-orderby-return)。這應該讓你的空值最後顯示出來。
for $each in $x/ArticleSequenceNumber
stable order by xs:integer($each) empty least
return $each
,如果你把一個ArticleSequenceNumber介於指數和做正確的位置進行排序,你會得到排序脫落指數法的。
您可以將排序約束添加到搜索選項,並將排序標記指定爲搜索字符串的一部分。但是,如果你可以分享一些代碼,它會有所幫助。 – grtjn
你還可以詳細說明何時何地得到xdmp:cast異常嗎? – grtjn