javascript - MarkLogic:按属性值查找

标签 javascript node.js marklogic

我有一个 MarkLogic 8 数据库:

declareUpdate();
var book0 = {
  id: fn.generateId({qwe: 'book'}),
  username: 'book',
  password: 'pass'
};
var book1 = {
  id: fn.generateId({asd: 'book'}),
  username: 'user',
  password: 'pass1'
};
xdmp.documentInsert(
       'zz' + book0.id,
       book0,
       xdmp.defaultPermissions(),
       ['qwe']);
xdmp.documentInsert(
       'xx' + book1.id,
       book1,
       xdmp.defaultPermissions(),
       ['qwe']);

所以我想使用 Node.js API 按名称查找它们:

var db = marklogic.createDatabaseClient(connection.connInfo);
var qb = marklogic.queryBuilder;
function findByName(name) {
    return db.documents.query(
        qb.where(
            qb.collection('qwe'),
            qb.value('username', name)
        )
    ).result();
}

问题是它不仅找到 useruser0,而且还找到 users 并且如果我使用用户名 创建一个文档book 它将同时找到 bookbooks

最佳答案

值查询通过对文本中的每个单词进行词干分析来匹配 JSON 属性的整个文本(如果启用了词干分析,这是默认设置)。

如果(如本例中)这不是您想要的,您可以执行以下任一操作:

  • 为 JSON 属性创建字符串范围索引(如果只需要精确匹配,则使用根排序规则)

  • 在数据库配置中启用单词搜索,并在查询中使用“unstemmed”选项。

如果您还在数据库配置中关闭了词干搜索,则不必传递该选项(并避免两种类型的索引所需的额外资源)。

要限制对特定属性的配置更改,您可以为该属性配置一个字段,而不是配置整个数据库。

有关更多背景信息,请参阅:

http://docs.marklogic.com/guide/search-dev/stemming

http://docs.marklogic.com/guide/admin/text_index

http://docs.marklogic.com/cts.jsonPropertyValueQuery?q=cts.jsonPropertyValueQuery&v=8.0&api=true

希望有帮助,

关于javascript - MarkLogic:按属性值查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31023876/

相关文章:

javascript - .fullcalendar 不是“提交按钮单击”上的功能

javascript - 使用 match 按指定时区的日期查找文档

node.js - NPM:还原已安装的包

java - MarkLogic TCP 连接

sparql - MarkLogic 返回的数字不使用科学记数法

javascript - nginx:将所有请求发送到单个 html 页面

javascript - 如何在 HTML5 和 Javascript 中添加计时器?

Javascript隐藏div并显示

javascript - 是否有 TCP 套接字库/协议(protocol)可以进行消息分帧并受 JS 和 C# 支持?

xml - Marklogic XSLT 异常处理