MarkLogic:按属性值查找

时间:2015-06-24 10:14:51

标签: 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的文档,它会找到{{1} }和book

1 个答案:

答案 0 :(得分:2)

值查询通过阻止文本中的每个单词来匹配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

希望有帮助,