了解Marklogic中的范围索引

时间:2013-11-11 08:45:19

标签: indexing marklogic

我在ML文档中找到以下内容:  范围索引允许服务器将值映射到片段,并将片段映射到值...前一个功能用于支持“范围谓词”....后者用于支持操作的快速排序。 任何人都可以向我解释一下。描述如何保持这种映射的某种图表将非常有用。

2 个答案:

答案 0 :(得分:5)

是的,请阅读Jason关于MarkLogic内部工作细节的优秀论文。

范围索引的简单摘要是:范围索引是排序的术语列表。术语列表是存储在文档中的值的倒排索引。例如,对于单词索引,创建包含所有文档中所有单词的术语列表(术语列表)。列表中的每个术语都是一个单词,比如“humdinger”,以及一个相关的片段ID集合,其中出现该单词。当您搜索“humdinger”时,ML检查术语列表以找出该词出现的片段。容易。更复杂的搜索只是所有适用术语列表中所有匹配术语的集合交叉。

大多数“常规”索引都没有排序,它们被组织为哈希以使匹配项有效。它们产生一组结果,但没有排序(之后应用相关性排序)。另一方面,范围索引是一个术语列表,按其术语的值排序。因此,范围索引表示在数据库中的元素或属性的所有实例中出现的唯一值的范围。

由于范围索引术语列表是有序的,因此当您在搜索中获得匹配时,您不仅知道它们出现在哪些片段中,还会知道该字段的可能值的排序顺序。 MarkLogic的XQuery经过优化,可以识别何时提供了一个“order by”子句,该子句引用了一个范围索引的元素或属性。这使得它不是通过比较匹配的文档来排序,而是通过迭代排序的术语列表并按该顺序获取匹配的文档。这使得它更快,因为不需要触摸文档本身来确定它们的排序顺序。

但等等,还有更多。如果您通过搜索结果进行分页,只获取一小部分匹配结果,那么按范围索引字段快速排序也可以帮助您。如果在应用页面窗口选择谓词之前注意不要访问文档的任何其他部分(范围索引元素除外),则永远不需要获取该窗口之外的文档。预先排序选择和快速跳过的组合实际上是您可以有效地逐步执行大型排序结果集的唯一方法。

范围索引还有一个有用的功能。您可以将它们的值作为词典进行访问,枚举整个数据库中给定元素或属性中出现的唯一值,但不会实际查看任何文档。这对于自动建议和获取方面的计数等问题非常有用。

我希望澄清范围索引是什么。

答案 1 :(得分:3)

Inside MarkLogic Server中查看Jason Hunter的文章。有关范围索引的整个部分。