假设我有一个如下的xml:
<xx>
<yy>
<name>A</name>
<value>1</value>
</yy>
<yy>
<name>A</name>
<value>2</value>
</yy>
<yy>
<name>B</name>
<value>1</value>
</yy>
</xx>
现在我要查找是否存在名称为A且值为1的'yy'。所以这里匹配的内容应该是:
<yy>
<name>A</name>
<value>1</value>
</yy>
我正试图通过REST调用,qbe GET请求来做到这一点,但无法做到。有人能帮我一下吗?
/v1/qbe
or
/v1/search
对于/v1/search API,您需要使用自定义搜索选项来实现这一点。
上传自定义搜索选项到MarkLogic: http://developer.marklogic.com/learn/rest/custom-search#search-using-an-element-value-constraint
您的搜索选项将根据您创建的索引定义搜索约束。你的搜索选项应该像这样:
<options xmlns="http://marklogic.com/appservices/search">
<constraint name="yy">
<element-query name="yy" ns="" />
</constraint>
<constraint name="name">
<value>
<element ns="" name="name"/>
</value>
</constraint>
<constraint name="value">
<value>
<element ns="" name="value"/>
</value>
</constraint>
</options>
假设你上传这些选项为"mySearchOptions"
最后,您可以使用这个GET请求来获取您想要的搜索结果:
http://localhost REstrongERVER_PORT/v1/搜索? q = yy % 3(名称% 3 aa % 20和% 20值% 3 a1)和选项= mySearchOptions
你能显示你正在发送的QBE吗?
您应该能够将查询参数设置为
<yy><name>A</name><value>1</value></yy>
加上适当的转义,如:
.../v1/qbe?query=%3Cyy%3E%3Cname%3EA%3C/name%3E%3Cvalue%3E1%3C/value%3E%3C/yy%3E
由于URL转义问题,通常更容易从编辑过的文件中发布QBE。
顺便说一下,如果目标是返回匹配的文档,就没有理由设置范围索引。通用索引匹配文档。范围索引对于进行关系比较(例如<)、排序或从大量文档中提取值列表或元组非常有用。