marklogic是否可以选择执行搜索,在文档中查找与查询文本中的条款类似的单词?
我无法找到任何东西。所以我尝试使用spell创建自己的:levenshtein-distance结合cts:tokenize和cts:你可以在这里查看的单词https://github.com/freshie/ml-levenshtein-search/blob/master/levenshtein-distance.xqy
这确实给了我想要的东西但它只是给了我拼写相近的单词。关于如何做的任何想法听起来像搜索?
答案 0 :(得分:2)
最简单的方法是首先使用cts:words()
根据语料库制作可能单词的字典。然后使用spell:suggest-detailed()
根据查询文本查找类似的匹配项,限制在一定距离之外。法术扩展算法基于双变音符,它比Levenshtein更好,因为它的语音和你想要的声音不像拼写一样。我发现将限制物限制在25的距离会给你一定程度的模糊效果。
提前:
spell:insert("dictionary.xml", spell:make-dictionary($word-sequence))
然后(用0.9毫升方言):
define function expand-spell($word as xs:string)
as xs:string*
{
let $threshold := 25
let $options := <options xmlns="http://marklogic.com/xdmp/spell">
<distance-threshold>{ $threshold }</distance-threshold>
<maximum>20</maximum>
</options>
for $suggest in spell:suggest-detailed("dictionary.xml", $word, $options)//spell:word
order by $suggest/@word-distance
return string($suggest)
}
我按距离排序,所以我可以在演示中显示扩展,更接近的匹配会在列表中更高。