【问题标题】:How multi key index is done in SOLRSOLR中多键索引是如何完成的
【发布时间】:2020-01-01 06:49:21
【问题描述】:

Multikey 是 Collection 中的一个数组字段。如果该字段不是数组字段,则很容易索引。举个例子

 {
    {
      "message":"msg1",
      "tags":["abc","cde","efr"]
    },
    {
      "message":"msg2",
      "tags":["abc,"efgh","efk"]
    },
    {
      "message":"msg3",
      "tags":["abc,"efgh","efr"]
    }
  }

这里的标签是多键字段,Solr 中有一个术语叫做 multiValued=true|false 。我想知道如何在 Solr 中对多键字段进行索引。有人可以从架构的角度解释一下吗,因为互联网上没有足够的资源来解释这一点。

【问题讨论】:

  • 那你在问什么?如何配置字段?或者它是如何在幕后实现的?幕后真的没有任何魔法 - 它只是作为单独的术语索引(至少它是),它们之间有很大的位置增量以避免它们匹配位置查询,如"abc efgh"
  • 我在问它是如何实现的。我无法理解你的问题。你能解释一下吗?

标签: database indexing database-design solr nosql


【解决方案1】:

当为单个字段提供多个术语时(即当 multivalued 为真时),标记的索引与它们对于任何其他字段的索引一样,它们只是在它们之间的距离较大的情况下被索引,因此它们不会查询词组时相互影响。在上面的示例中,"abc" 的位置为 0,"cde" 的位置为 100,"efr" 的位置为 200。如果它们被索引为单个字段 ("abc cde efr"),它们的位置为 0,位置为1 和位置 2。

由于这个位置差距如此之大,查询"cde efr" 不会得到成功,因为它通常会查询一个接一个索引的标记。设置positionIncrementGap 用于调整此值。

positionIncrementGap

对于多值字段,指定多个值之间的距离,以防止虚假短语匹配

除此之外,在实际索引方面没有对多值字段进行特殊处理。每个值/一组标记都存在于字段中,就像它们被索引为一个值时一样,但它们的位置在幕后进行了调整,以防止它们相互影响。

【讨论】:

    猜你喜欢
    • 2017-07-02
    • 2017-07-06
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2013-12-17
    相关资源
    最近更新 更多