MarkLogic基本问题与SELECT API和Java API等效

时间:2014-03-16 00:06:06

标签: java sql json nosql marklogic

我是NoSQL的新手,并且在文档中喋喋不休。

我有一个MarkLogic数据库实例,其中填充了我感兴趣的JSON文档。我已经执行了一个基本的搜索,并有一个SearchHandle,它将为我提供匹配的URI。

我想评估那些JSON文档中某些特定键的值

在SQL中,这是一个简单的SELECT,其中='somevalue'。

在这里,我很难找到真正实现这一目标的正确方法。我设置了我的JSONDocumentManager,建立了我的搜索条件标准来获取我的文档,然后我将结果返回给我的StringHandle。

我现在需要解析扁平的JSON字符串以查找我的密钥吗?

我是否需要通过JacksonHandle绑定将整个JSON文档转换为POJO,以便通过URI查找文档中的单个值?

我情不自禁地认为这可能是我在文档中没有发现的单行...

2 个答案:

答案 0 :(得分:1)

Raevik:

与SQL SELECT(专为结果集设计并仅为查询过滤到一行并投影一列而返回单个值)类似,MarkLogic查询响应旨在从非常大的数据中返回多个文档,结构或值集。与在SQL中一样,单个值是查询的特殊情况,该查询限定一个文档并提取一个值。

定义该查询的最简单方法可能是使用“按示例查询”提取。请参阅:

http://docs.marklogic.com/guide/search-dev/qbe#id_54044

您还可以使用Admin UI在文档中的JSON键上定义范围索引:

http://docs.marklogic.com/guide/rest-dev/search#id_95526

然后使用QueryManager.values()方法从范围索引中提取一个值。

MarkLogic 7确实支持SPARQL,它具有获得单一答案的语法,因此通过将数据保存为三元组,可以进行这些查询。

为了完整性:您还可以使用StructuredQueryBuilder过滤JSON键,并使用JSON键指定值查询,如(未经测试):

StructuredQuery queryDef = queryBldr.value(queryBldr.jsonKey("key"),"value");

或使用“按示例查询”(未经测试):

StructuredQuery queryDef = newRawQueryByExampleDefinition(new StringHandle("{\"$query\":{\"key\":\"value\"}}"));

有关这些过滤功能的更多详细信息,请参阅:

http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/StructuredQueryBuilder.html http://docs.marklogic.com/guide/search-dev/qbe

顺便说一句,Jackson不仅可以用于数据绑定到POJO,还可以用于对JSON的ad hoc DOM访问。

希望有所帮助。

答案 1 :(得分:0)

MarkLogic支持sortofxquery的堂兄的SQL

   for $d in doc("depts.xml")//deptno
   let $e := doc("emps.xml")//employee[deptno = $d]
   where count($e) >= 10
   order by avg($e/salary) descending
   return
     <big-dept>
        { $d,
           <headcount>{count($e)}</headcount>,
           <avgsal>{avg($e/salary)}</avgsal>
        }
     </big-dept>