現在我正在使用此代碼生成片段,它基於我從MarkLogic搜索中獲得的JSON文檔。MarkLogic變音不敏感片段
xquery version "1.0-ml";
module namespace searchlib="http://ihs.com/lib/searchlib";
import module namespace search="http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";
import module namespace json="http://marklogic.com/xdmp/json" at "/MarkLogic/json/json.xqy";
declare function searchlib:get-snippet($docc,$words) {
let $doc:= json:transform-from-json($docc)
let $squery := search:parse($words)
let $result := <result>{search:snippet($doc,$squery,
<transform-results apply="snippet" xmlns="http://marklogic.com/appservices/search">
<max-snippet-chars>255</max-snippet-chars>
</transform-results>)}</result>
return $result//search:match
};
進行搜索時我使用的是:
cts.jsonPropertyValueQuery(fieldname, values,
['case-insensitive', 'diacritic-insensitive'])
所以,搜索的工作變音不敏感,產生了良好的效果,但在search:snippet
我不能夠通過diacritic-insensitive
選項爲cts.jsonPropertyValueQuery
。
在documentation我可以描述
選項來定義搜索語法和控制搜索看到這一點。有關功能搜索:搜索,請參閱$ options的說明。請注意,您無法使用search:snippet在transform-results選項中指定apply屬性。要使用不同的摘要功能,請改用搜索:搜索或搜索:解析。
但在這裏,它是:
search:snippet(
$result as node(),
$cts-query as schema-element(cts:query),
[$options as element(search:transform-results)?]
) as element(search:snippet)
那麼是否意味着我無法通過其他選項進行搜索:片段?或者有這樣的選擇嗎?
我使用chávez
測試它,它正在產生效果,但片段是包含精確匹配的文件只有正確生成,這意味着該文件
查韋斯做了
不會得到highligh上Chavez
和
查韋斯做了
將得到一個highligh
在此先感謝!
我想你的意思是說' Chavez search:highlight>'不是結果的一部分。這可能是MarkLogic的一個錯誤,因爲它似乎與此功能所期望的相反。作爲一種解決方法,您可以考慮編寫一個添加突出顯示後處理的函數,儘管這樣做可能不是微不足道的(考慮使用NFD(分解),這可以消除搜索詞和結果中的變音符號,並且可以在內部進行搜索結果使用正常的XPath/XQuery函數)。 –
Abel
@Abel耶,這正是我的問題。我沒有在「查韋斯」上獲得重點。我擔心手動操作可能會降低性能,但也許我會嘗試製作一些解析文檔的函數。謝謝! – wudzik
你應該考慮讓MarkLogic知道,如果它是一個錯誤,也許他們已經有一個解決方法,甚至補丁。 – Abel