我正在为Cassandra制定一个证明不可能的解决方案。
我们有一个表格会根据一些搜索条件返回一组候选人。得分最高的行将返回给用户。我们可以使用SQL轻松完成这项工作,但是需要迁移到Cassandra。以下是涉及的表格:
值
ID | VALUE | COUNTRY | STATE | CITY | COUNTY
--------+---------+----------+----------+-----------+-----------
1 | 50 | US | | |
--------+---------+----------+----------+-----------+-----------
2 | 25 | | TX | |
--------+---------+----------+----------+-----------+-----------
3 | 15 | | | MEMPHIS |
--------+---------+----------+----------+-----------+-----------
4 | 5 | | | | BROWARD
--------+---------+----------+----------+-----------+-----------
5 | 30 | | NY | NYC |
--------+---------+----------+----------+-----------+-----------
6 | 20 | US | | NASHVILLE |
--------+---------+----------+----------+-----------+-----------
评分
ATTRIBUTE | SCORE
-------------+-------------
COUNTRY | 1
STATE | 2
CITY | 4
COUNTY | 8
发送的查询可以填充或不填充这四个属性中的任何一个。我们搜索我们的值表,计算得分,然后返回最高得分。如果values表中的列为null,则表示它适用于所有列。
示例:
Query: {Country: US, State: TX}
Matches Value IDs: [1, 2, 3, 4, 6]
Scores: [1, 2, 4, 8, 5(1+4)]
Result: {id: 4} (8 was the highest score so Broward returns)
你如何在Cassandra 2.1中模拟这样的东西?
答案 0 :(得分:0)
发现实现这一目标的最佳方法是使用Solr和Cassandra。 关于使用Solr的事情需要注意,因为我需要的所有资源都分散在互联网中。
$ CASSANDRA_HOME / bin / dse cassandra -s
创建KEYSPACE ...与REPLICATION = {' class':' NetworkTopologyStrategy',' Solr':1}
在启用solr的密钥空间中创建表后,使用dsetool创建核心。
$ CASSANDRA_HOME / bin / dsetool create_core keyspace.table_name generateResources = true reindex = true
这将允许solr索引您的数据并为您的cassandra表生成许多二级索引。
SELECT * FROM keyspace.table_name WHERE solr_query =' {" q":" {( - column :[ * TO *] AND *:*)或栏:值}"';
<fieldtype>
,名称为TextField。将org.apache.solr.schema.TextField
替换为org.apache.solr.schema.StrField
。您还必须删除分析器,StrField不支持这些。这就是它,希望我能让人们免于遇到的所有头痛。