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的名字find它们:

 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创build一个文件,它会发现bookbooks

值查询通过剔除文本中的每个单词(如果启用了stemming,这是默认值)来匹配JSON属性的整个文本。

在哪里(如在这种情况下),这不是你想要的,你可以做以下任一项:

  • 为JSON属性创build一个string范围索引(如果只需要完全匹配,则使用根归类)

  • 打开数据库configuration中的单词search,并在查询中使用“未定型”选项。

如果您也closures数据库configuration中的词干search,则不必传递选项(并避免两种索引所需的额外资源)。

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

欲了解更多背景,请参阅:

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

希望有所帮助,