2012-05-22 29 views
0

我正在與search-api一起工作,並想知道如何在運行中操作搜索結果?我需要這樣的事情:在Marklogic中使用search-api執行結果集操作

我需要根據一些條件對結果集進行排序,如果條件的值爲null,那麼我應該應用一些任意的整數值,這樣我就不會得到xdmp:cast異常。

請幫忙。

問候 阿米特

+0

您可以將排序約束添加到搜索選項,並將排序標記指定爲搜索字符串的一部分。但是,如果你可以分享一些代碼,它會有所幫助。 – grtjn

+0

你還可以詳細說明何時何地得到xdmp:cast異常嗎? – grtjn

回答

1

每一次重新排序將需要一個新的API調用 - search:searchsearch: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 

您應該能夠在搜索約束中指定相同的排序規則。相應的範圍索引將是具有相同排序規則的字符串索引。

+0

xquery版本'1。0毫升'; 讓$ X:= 1 5 10 63 < ArticleSequenceNumber> 54 19 21 29 11 爲$每個在$ x/ArticleSequenceNumber order by xs:integer($ each) return $ each –

0
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 
+0

這是示例調用,我想處理空值,它應該出現在結果的底部,我希望它使用seacrh-api進行排序, 請幫忙。 –

0

嘗試使用空的最少(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介於指數和做正確的位置進行排序,你會得到排序脫落指數法的。