MarkLogic:按 属性 值查找

MarkLogic: find by property value

我有一个 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

希望对您有所帮助,