我通过示例使用来自ML的RawQueryByExampleDefinition进行搜索查询。在升级到版本8之前,传入如下所示的动态选项(关注元素名称):
<options xmlns="http://marklogic.com/appservices/search">
<sort-order collation="http://marklogic.com/collation/en/S1/EO/CU/MO" type="xs:string" direction="ascending">
<element ns="" name="dynamicElement"/>
</sort-order>
</options>上述方法适用于没有配置任何元素范围索引的ML 7。然而,对于ML 8,这给了我一个错误,在深入研究原因之后,现在似乎需要创建一个元素范围索引,否则ML将抛出一个错误。
我的问题是,从我的API中摄入到ML中的元素并不是真正的预先确定的或无模式的,这意味着它们(客户机)可以插入任何JSON格式。是否有一种方法可以动态或以编程方式创建元素范围索引,以便系统首先检查在“无模式”数据中传递的内容,并根据传递的JSON结构或元素动态添加元素范围索引?
发布于 2015-02-15 18:49:38
对我来说这听起来像是窃听器的修复。对于任何规模的查询排序选项,您应该始终有一个适当的范围索引。如果刻度不重要,请使用Java进行排序。
您可以使用admin:https://docs.marklogic.com/admin:database-add-range-element-index和相关函数创建范围索引。您可以创建任意数量的范围索引。
它可以公开允许用户按需创建范围索引的REST。但是,在您的情况下,我会首先进行一些仔细的分析,因为这可能会导致磁盘和内存利用率的无限增长。您还可能需要考虑具有相同名称但语法含义不同的元素之间可能发生的冲突,调用不同的排序规则等等。这就是XML名称空间的用途:ns1:title与ns2:title。但是JSON没有名称空间。
发布于 2015-02-25 23:19:52
我认为值得指出的是,您还可以创建一个基于字段的字段范围索引,该字段可以使用XPath在任何深度匹配元素名称和json-属性的灵活列表。这样,应用程序可以引用字段,而服务器上的字段配置可以表示您希望包含的最新元素列表。
那么你的选择就会变成:
<options xmlns="http://marklogic.com/appservices/search">
<sort-order collation="http://marklogic.com/collation/en/S1/EO/CU/MO"
type="xs:string" direction="ascending">
<field name="dynamicField"/>
</sort-order>
</options>https://stackoverflow.com/questions/28525913
复制相似问题