PerSSTableIndexWriter.java:211 - 列负载的拒绝值(分析为错误)

PerSSTableIndexWriter.java:211 - Rejecting value for column payload (analyzed false)

我们有 Cassandra 3.4.4。 在 system.log 中,我们有很多这样的消息:

INFO  [CompactionExecutor:2] 2020-09-16 13:42:52,916 PerSSTableIndexWriter.java:211 - Rejecting value (size 1.938KiB, maximum 1.000KiB) for column payload (analyzed false) at /opt/cassandra/data/cfd/request-c8399780225a11eaac403f5be58182da/md-609-big SSTable.

这些消息有什么意义? 这些条目每秒出现数百个,日志每分钟轮换一次。

你描述的症状告诉我你已经在 cfd.request table 的 payload 列上添加了 SASI 索引,但没有使用。

这些消息的出现是因为 Cassandra 正在检查数据,试图为它们建立索引,因为 payload 列中的数据太多。 SASI 的最大术语大小为 1024 字节,但在您发布的示例中,术语大小为 1.9KB。

如果该列只包含ASCII 字符,则最大术语长度为1024 个字符,因为每个ASCII 字符为1 个字节。如果列有扩展 Unicode,如中文或日文字符,最大术语长度会更短,因为每个占用 3 个字节。

您没有在索引上配置 SASI 分析器 (analyzed false),因此整个列值被视为一个词项。如果您使用标准的 SASI 分析器,列值将被标记化,将它们分解成多个更短的术语,您将不会看到那些索引失败被记录下来。

如果您对详细的修复步骤感兴趣,请参阅 https://community.datastax.com/questions/8370/。干杯!