我的MarkLogic数据库中的xml示例
<metadata>
<title>first title</title>
<author>gorge k</author>
<location>London</location>
</metadata>
我在title
,author
和location
设置了范围索引。我想创建默认搜索:所有元素的建议源,而不是任何单个元素。
在搜索中:选项我只将标题作为默认建议源选项,如下所示
<default-suggestion-source>
<range collation="http://marklogic.com/collation/"
type="xs:string">
<element ns="" name="title"/>
</range>
</default-suggestion-source>
现在我想在上面的默认建议源选项中添加author
和location
。
我尝试使用此配置添加author
:
<default-suggestion-source>
<range collation="http://marklogic.com/collation/"
type="xs:string">
<element ns="" name="title"/>
</range>
<range collation="http://marklogic.com/collation/"
type="xs:string">
<element ns="" name="author"/>
</range>
</default-suggestion-source>
但是我得到了以下错误:
[1.0-ml] XDMP-ARGTYPE :(错误:XPTY0004)fn:string((属性{fn:QName(&#34;&#34;,&#34;整理&#34;)} {&# 34; http://marklogic.com/collation/&#34;},属性{fn:QName(&#34;&#34;,&#34;整理&#34;)} {&#34; http://marklogic.com/collation/&# 34;})) - arg1不是item()类型?
任何人请建议如何实现这一目标?
答案 0 :(得分:2)
您可以为refer to a constraint设置建议来源。您可以将约束设置为field, based on the three elements you're interested in。设置一个字段范围索引和搜索选项,如下所示,我认为这应该工作。
<search:options xmlns="http://marklogic.com/appservices/search">
<constraint name="suggestions">
<range type="xs:string" collation="http://marklogic.com/collation/">
<field name="suggest-field"/>
</range>
</constraint>
<default-suggestion-source ref="suggestions" />
</search:options>
答案 1 :(得分:0)
除了Dave Cassel的解决方案外,我建议不要将default-suggestion-source
引用为约束。而是将约束包括在default-suggestion-source
节点中。
<search:options xmlns="http://marklogic.com/appservices/search">
<default-suggestion-source>
<range type="xs:string" collation="http://marklogic.com/collation/">
<field name="suggest-field"/>
</range>
</default-suggestion-source>
</search:options>
为什么? MarkLogic不仅会建议在源中找到的值(在这种情况下为范围索引),还会建议约束名称。因此,您将有一个建议suggestions:
。对于默认来源,可能不希望这样做。
有关更多信息,请参见此answer。