我正在尝试使用REST API搜索某些内容并突出显示MarkLogic中XML内容(如google)中的搜索字符串。问题是当我包括" ME"在搜索字符串中,它突出显示了' i'标签(html斜体标签)以及" Me"在内容中。我创建了一个包含一些元素的文档,并在文档上运行了单词查询。 例如XML内容:
<resources>
<title> some data from me</title>
<desc> more data <i> from </i> somewhere by me </desc>
</resources>
我创建了一个包含根节点资源的文档&#39;和儿童元素&#39;标题&#39;和&#39; desc&#39;并使用单词查询搜索文档中的搜索字符串。
现在,当我搜索&#34;某些我&#34; ,它检索像
这样的内容 <resources>
<title> <<span class="highlight">some</span> data from <<span class="highlight">me</span>
</title>
<desc> more data <<span class="highlight">i</span>> from <<span class="highlight">i</span>> somewhere by <span class="highlight">me</span> </desc>
</resources>
网址:
localhost:9000/v1/search?q=some me&collection=Data&start=0&pageLength=10&options=Transformation&format=json
我正在使用cts:突出显示突出显示,有些事情如下:
cts:highlight($final-result, $query, fn:concat('<span class="highlight">',$cts:text,'</span>')), $custom-config)
有关为什么html元素在此处突出显示的任何想法? 在此先感谢。
答案 0 :(得分:5)
您可能以文本格式插入文档,而不是xml格式。我可以通过以文本格式插入来重现您的问题:
xdmp:document-insert("test.xml", text {"<resources>
<title> some data from me</title>
<desc> more data <i> from </i> somewhere by me </desc>
</resources>"})
然后运行cts:突出显示该文档:
cts:highlight(doc("test.xml"), cts:parse("some me"), concat('<span class="highlight">', $cts:text, '</span>'))
但是如果我以XML格式重新插入文档:
xdmp:document-insert("test.xml", <resources>
<title> some data from me</title>
<desc> more data <i> from </i> somewhere by me </desc>
</resources>)
然后相同的cts:突出显示效果更好:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<title> <span class="highlight">some</span> data from <span class="highlight">me</span></title>
<desc> more data <i> from </i> somewhere by <span class="highlight">me</span> </desc>
</resources>
如果我添加来自@ehennum和@mholstege的建议,而是运行此cts:highlight:
cts:highlight(doc("test.xml"), cts:parse("some me"), <span class="highlight">{$cts:text}</span>)
然后我得到了我猜你想要的东西:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<title> <span class="highlight">some</span> data from <span class="highlight">me</span></title>
<desc> more data <i> from </i> somewhere by <span class="highlight">me</span> </desc>
</resources>
答案 1 :(得分:1)
这是什么版本的MarkLogic?
你能提供一个更完整的例子吗?什么是$ custom-config例如? REST调用结果如何与cts相关联:突出显示?要以这种方式突出显示标记,结果必须是文本而不是XML。
顺便说一下,cts的第三个参数:highlight是一个表达式 - 如果你想创建标记,只需在那里使用构造函数,而不是字符串连接:
cts:highlight($final-result, $query, <span class="highlight">{$cts:text}</span>, $custom-config)
答案 2 :(得分:1)
尝试将cts:hightlight()表达式中的标记作为节点而不是字符串提供。
即代替
<span class="highlight">{$cts:text}</span>
试
catalog_category_product
有关详细信息,请参阅第一个示例:
http://docs.marklogic.com/cts:highlight?q=cts:highlight
希望有帮助,