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版本并查看整个查询将是有用的。
希望有所帮助,