3

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

4

2 回答 2

5

是的,请阅读 Jason 的优秀论文,了解 MarkLogic 内部工作的所有细节。

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

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

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

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

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

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

于 2013-11-13T01:24:53.303 回答
3

查看 Jason Hunter 在Inside MarkLogic Server中的文章。关于范围索引有一整节。

于 2013-11-11T12:02:18.593 回答