Cassandra Map类型的Solr索引值

时间:2014-06-19 23:59:11

标签: solr4 cassandra-2.0 datastax

我有一个包含Map类型的Cassandra表。我想创建一个Solr索引,它允许我搜索Map中的所有值(忽略键)。我用Set类型成功地做到了这一点,并且希望有一种方法可以为Map做同样的事情。

这是一个例子。

CREATE TABLE company (id text PRIMARY KEY, name text, user_phones map<text,text>);

INSERT INTO company (id, name, user_phones) values ('1', 'Joes Construction', {'userid_52':'1-333-444-5555', 'userid_17':'1-333-222-4444'});

INSERT INTO company (id, name, user_phones) values ('5', 'Marks Auto', {'userid_7':'1-333-123-4567'});

我只是想使用solr索引来查找具有给定电话号码的公司 - &#34; user_phones:1333 *&#34;

不幸的是我没有找到任何允许我这样做的东西。我已阅读此页面 - Mapping of Solr types和此页面 - Using Dynamic Fields。第二页讨论使用DynamicFields,但这会迫使我知道地图中的键会是什么样子,在我的情况下,我的所有键都是唯一的。如果我有办法简单地提取地图的值并将它们复制到字段我就会这样做。不幸的是,我还没弄清楚如何做到这一点。

有没有办法在Solr中有效搜索Cassandra地图的值?

我使用的是Cassandra 2,Solr 4,DataStax 4。

2 个答案:

答案 0 :(得分:1)

您最好的选择是使用非存储的多值复制字段,并将动态模式设置为要从here复制的源字段

答案 1 :(得分:1)

您可以采用两种方法:

1)在 dataconfig.xml

中尝试使用Transformer
< entity name="Entity" transformer="RegexTransformer" Query="........>

< field column="user_phones" splitBy="}"   />

< /entity>

现在您可以搜索“user_phones:* 1333 *”它会带来您的预期输出。 :)

2)请尝试使用dataconfig.xml中的<script>..... </script>

Cassandra与Solr整合。 here