根据DSE documentation,DSE搜索不支持计数器列。
我有一个基本的CF(ckey,count),其中count
是计数器。
create table change_count ( ckey text, count counter) primary key (ckey)
当然,dsetool create_core ks.change_count
在这个CF上失败,因为有一个计数器,“计数器不支持Solr索引!”错误。
好的,我手动创建Solr架构文档:
<?xml version="1.0" encoding="UTF-8"?>
<schema name="autoSolrSchema" version="1.5">
<types>
<fieldType class="org.apache.solr.schema.StrField" name="StrField" />
</types>
<fields>
<field indexed="true" multiValued="false" name="ckey" stored="true" type="StrField" />
</fields>
<uniqueKey>(ckey)</uniqueKey>
</schema>
,将其保存在文件中,并使用dsetool create_core ks.change_count schema=/tmp/1.xml
,但我仍然得到相同的“计数器不支持Solr索引!”错误。
所以,第一个问题是 - 是否有一种方法可以强化DSE并使用带计数器的CF,以及非计数器列的solr索引。
如果不可能,那么我想就如何解决表示数据的问题提出任何建议。假设'ckey'是“epoch hour”,而count只是在那个小时内发生的一些事件的反击。原子增量的计数器类型,即使我使用轻量级事务,此CF上的争用也会非常高。索尔索引是因为我想进行范围搜索等等。
我可以创建2个CF:
create table change_count ( ckey text, count counter) primary key (ckey)
create table change_count_idx ( ckey text ) primary key (ckey)
然后我可以Solr-index change_count_idx
,但在change_count
表中计数,确保我在两者中都有相同的键。然后我可以使用Solr获取匹配的密钥,使用Cassandra获取实际数据 - 进行客户端连接。但这可能是成千上万的PK查找,我认为性能不会在大范围内存在。
答案 0 :(得分:0)
DSE搜索无法严格描述您所描述的内容。
它可能很脆弱,但如果你真的想要搜索这些计数器,你可能要考虑创建change_count
的“镜像”版本,使用bigint
代替counter
。然后,您可以定期将change_count
中的数据读入“镜像”表并直接查询。