我正在研究MarkLogic中的搜索,我的要求是在搜索时带来结果" NAVIN RAWAT"是:
o Search should return for N Rawat
o Navin Rawat
o Navin R
o Navin Raw
o Navin Rawat
我打算使用搜索:搜索来获取这些结果。但是,我没有得到如何获得这些结果,因为它们彼此不同。在使用MarkLogic搜索时,任何机构都可以帮助或建议我如何获得这些结果:search或cts:search。
答案 0 :(得分:3)
我认为对于这样的要求,您需要编写一些搜索扩展代码。您可以为Search API构建custom constraint来执行此操作。作为字符串查询,您可以执行类似
的操作expand:"Navin Rawat"
结构化查询看起来会有所不同,但会传达相同的信息。下一步是进行实际扩展。目前还不清楚你有什么规则 - 对于姓氏,是任何数量的起始字母,还是有一个原因你没有包括" Navin Ra" ?我假设你想要任意数量的信件。
您可以构建一个看起来像这样的函数来为姓氏提供选项:
declare function local:choices($first, $last)
{
for $i in (1 to fn:string-length($last))
return
fn:substring($last, 1, $i) ! ($first || " " || .)
};
local:choices("Navin", "Rawat")
=>
完成后,您的解析函数可以返回带有该字符串序列的cts:word-query()。为你的" N Rawat"投入一些东西。案件,你已经设定好了。