【问题标题】:Apache Solr Field data type change from StringsApache Solr 字段数据类型从字符串更改
【发布时间】:2018-11-20 18:13:00
【问题描述】:

solr 核心中的一个字段是数据类型字符串,但它无法将值的长度容纳到字段中,所以我希望将其更改为其他可以容纳字符串的数据类型,

不幸的是 text_general 没有帮助,因为它类似于字符串而不是字符串。 是否有任何其他数据类型可以提供帮助?

【问题讨论】:

  • 默认的text_general是一个TextField,和StrField有很大的不同。 TextField 本身没有大小限制,而 StrField 限制为大约 32K 个字符。另一个区别是 text_general 被标记化(分成单词),这可能是您想要搜索的内容。
  • 我遇到了字符串字段的长度问题,那么我更改为处理它的可能数据类型是什么?
  • text_general 字段默认匹配良好。使用它有什么问题?
  • Text_General 适合字符串,但我们使用的是字符串数据类型,它就像一个数组并包含多个字符串,所以有什么类似于 text_general 的东西可以使用其中的项目列表吗?

标签: apache solr lucene


【解决方案1】:

字段是否为多值(您所描述的是什么),在字段类型上配置了一个 默认值,但该值可以为您所使用的每个字段覆盖定义。所以stringstrings的区别只是后者默认multiValued="true",而string默认multiValued="false"

在实际定义字段时,您可以覆盖它以说明您的文档是否允许特定字段为多值,而不管字段类型定义所说的内容。

<field name="string_field" type="string" multiValued="true"/>

将与strings 字段类型相同,因为它明确允许该字段在该字段中具有多个值。

因此,在您的情况下,您可以使用 text_general - 默认情况下它可能不会设置为 multiValued,但您可以在定义字段时进行配置。

<field name="your_field_name" type="text_general" multiValued="true" />

text_generalstring 之间的区别在于text_general 应用了分析链和标记器,因此文本在内部被拆分为更小的标记。

Lucene 对每个标记有 32768 个字符的硬性限制,这是您在将较大的值索引到 string 字段时遇到的限制。

如果您要在 Solr 中存储大型 blob,我可能会建议将它们放在 Amazon S3 或其他数据存储中,而不是将生成的 id 存储在 Solr 中。这样一来,索引大小就会保持较低,并且可以在合并段时消除开销。

【讨论】:

    【解决方案2】:

    text_general 是一个字符串数组。因此,如果您正在寻找类似于数组的字符串数据类型的类型 - text_general 应该这样做。

    text_general 的另一个优点是它允许标记化;字符串没有。

    【讨论】:

      猜你喜欢
      • 2011-11-02
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多