Marklogic 8 Node.js API – 如何范围search一个属性的子根目录?

[更新于28/09/17 17:15]

我正在操纵types的json数据:

[ { "id": 1, "title": "Sun", "seeAlso": [ { "id": 2, "title": "Rain" }, { "id": 3, "title": "Cloud" } ] }, { "id": 2, "title": "Rain", "seeAlso": [ { "id": 3, "title": "Cloud" } ] }, { "id": 3, "title": "Cloud", "seeAlso": [ { "id": 1, "title": "Sun" } ] }, ]; 

包含在数据库中后,使用一个node.js进行search

 db.documents.query( q.where( q.collection('test films'), q.value('title','Sun') ).withOptions({categories: 'none'}) ) .result( function(results) { console.log(JSON.stringify(results, null,2)); }); 

将返回名为“Sun”的电影和具有seeAlso / title属性(原谅xpath语法)='Sun'的电影。

我需要find1 /电影标题='太阳'2 /电影seeAlso / title ='太阳'。

我尝试使用q.scope()没有成功的容器查询; 我没有find如何范围根对象节点(第一种情况)和第二种情况,

 q.where(q.scope(q.property('seeAlso'), q.value('title','Sun'))) 

作为第一个结果返回与根对象节点内的所有文本匹配的项目

  { "index": 1, "uri": "/1.json", "path": "fn:doc(\"/1.json\")", "score": 137216, "confidence": 0.6202662, "fitness": 0.6701325, "href": "/v1/documents?uri=%2F1.json&database=Documents", "mimetype": "application/json", "format": "json", "matches": [ { "path": "fn:doc(\"/1.json\")/object-node()", "match-text": [ "Sun Rain Cloud" ] } ] }, 

这似乎很疯狂。

任何关于如何在非规格化json数据上进行search的想法?

劳伦特:

MarkLogic支持JSON上的XPath。

特别的,你可以考虑在根目录下设置一个path范围索引来匹配/标题:

http://docs.marklogic.com/guide/admin/range_index#id_54948

作用域属性匹配要求过滤或索引位置是准确的。 另一种方法是在/ seeAlso / title上设置另一个path范围索引

对于匹配问题,了解MarkLogic版本并查看整个查询将是有用的。

希望有所帮助,