我正在try 使用earch.suggest根据我数据库中的多范围索引向我返回一些建议.到目前为止,我已经try 了单个字符串元素范围索引,但我想我找不出正确的语法.

const search = require('/MarkLogic/appservices/search/search');
const options = 
fn.head(xdmp.unquote('<search:options xmlns:search="http://marklogic.com/appservices/search">' +
 '<default-suggestion-source>' +
   '<range collation="http://marklogic.com/collation//S1" type="xs:string">' +
      '<json-property>title</json-property>' +
   '</range>' +
 '</default-suggestion-source>' +
'</search:options>')).root;
search.suggest("Taiw", options)

I've changed a bit a code snippet from here: https://docs.marklogic.com/10.0/search.suggest but it does not produce any results: enter image description here

I have element range index in my database with data enter image description here enter image description here

我还try 使用JSON:

const search = require('/MarkLogic/appservices/search/search');
const options = {
  "search:options":{
   "default-suggestion-source":{
      "range":{
         "range":{
            "type":"xs:string",
            "collation":"http://marklogic.com/collation//S1",
            "element":{
               "name":"title"
            }
         }
      }
   }
}}
search.suggest("Taiw", options)

但我最后得到的是:

[JavaScript] XDMP-AS:(err:XPTY0004)$options as elements(search:options)?--无效强制: 目标 node {"搜索:选项":目标 node {"默认建议-源":目标 node {...} as元素(搜索:选项)

我做错了什么?我的数据库需要设置什么设置吗?我使用的是JSON数据

推荐答案

示例代码是错误的.

问题是每个搜索选项元素都应该在search命名空间中.因此,您需要将搜索名称空间前缀应用于所有元素:

const search = require('/MarkLogic/appservices/search/search');
const options = 
fn.head(xdmp.unquote('<search:options xmlns:search="http://marklogic.com/appservices/search">' +
 '<search:default-suggestion-source>' +
   '<search:range collation="http://marklogic.com/collation//S1" type="xs:string" facet="true">' +
     '<search:element ns="" name="title"/>' +
   '</search:range>' +
 '</search:default-suggestion-source>' +
'</search:options>')).root;
search.suggest("Ta", options);

或者,将命名空间的声明更改为不使用search前缀,然后从所有元素中删除search前缀:

const search = require('/MarkLogic/appservices/search/search');
const options = 
fn.head(xdmp.unquote('<options xmlns="http://marklogic.com/appservices/search">' +
 '<default-suggestion-source>' +
   '<range collation="http://marklogic.com/collation//S1" type="xs:string" facet="true">' +
     '<element ns="" name="title"/>' +
   '</range>' +
 '</default-suggestion-source>' +
'</options>')).root;
search.suggest("Ta", options);

在XQuery等效物中,示例显示了使用搜索名称空间声明默认(无前缀)名称空间,并且在导入模块时已经声明了前缀search,并且该前缀在范围内,因此,无论有没有前缀,Options元素都绑定到该名称空间.

Javascript相关问答推荐

如何编辑代码FlipDown.js倒计时?

Phaser框架-将子对象附加到Actor

类型脚本中只有字符串或数字键而不是符号键的对象

Rehype将hashtag呈现为URL

为什么这个JS模块在TypeScript中使用默认属性导入?""

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

有没有可能使滑动img动画以更快的速度连续?

我们如何从一个行动中分派行动

简单的PayPal按钮集成导致404错误

使用带有HostBinding的Angular 信号来更新样式?

令牌JWT未过期

Django导入问题,无法导入我的应用程序,但我已在设置中安装了它

通过解构/功能组件接收props-prop验证中缺少错误"

如何在Java脚本中并行运行for或任意循环的每次迭代

Angel Auth Guard-用户只有在未登录时才能访问登录页面,只有在登录时才能访问其他页面

如何使用Cypress在IFRAME中打字

在此div中添加一个类,并在一段时间后在Java脚本中将其删除

将Windows XP转换为原始数据以在html前端中显示

如何在preLoad()中自定义p5.js默认加载动画?

元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但GET:Object.在Reaction项目中