如何从多个范围元素源中获取 search:suggestion 作为 default-suggestion-source 选项
how get search:suggestion from multiple range elements source as default-suggestion-source option
xml 我的 MarkLogic 数据库中的示例如下所示
<metadata>
<title>first title</title>
<author>gorge k</author>
<location>London</location>
</metadata>
我在 title
、author
和 location
上设置了范围索引。我想在所有元素而不是任何单个元素上创建默认 search:suggestion 源。
在search:option中,我只有标题作为默认建议源选项,如下所示
<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: (err:XPTY0004) fn:string((attribute{fn:QName("","collation")}{"http://marklogic.com/collation/"}, attribute{fn:QName("","collation")}{"http://marklogic.com/collation/"})) -- arg1 is not of type item()?
任何人请建议如何实现这一目标?
您可以将建议来源设置为refer to a constraint. You can set up a constraint to be a 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>
除了 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:
。这可能不需要默认源。
如需进一步阅读,请参阅此 。
xml 我的 MarkLogic 数据库中的示例如下所示
<metadata>
<title>first title</title>
<author>gorge k</author>
<location>London</location>
</metadata>
我在 title
、author
和 location
上设置了范围索引。我想在所有元素而不是任何单个元素上创建默认 search:suggestion 源。
在search:option中,我只有标题作为默认建议源选项,如下所示
<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: (err:XPTY0004) fn:string((attribute{fn:QName("","collation")}{"http://marklogic.com/collation/"}, attribute{fn:QName("","collation")}{"http://marklogic.com/collation/"})) -- arg1 is not of type item()?
任何人请建议如何实现这一目标?
您可以将建议来源设置为refer to a constraint. You can set up a constraint to be a 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>
除了 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:
。这可能不需要默认源。
如需进一步阅读,请参阅此