【问题标题】:Solr index values of Cassandra Map typeCassandra Map 类型的 Solr 索引值
【发布时间】:2014-08-10 16:00:42
【问题描述】:

我有一个包含 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 索引来查找具有给定电话号码的公司 -- "user_phones:1333*"

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

有没有什么方法可以有效地在 Solr 中搜索 Cassandra 映射的值?

我正在使用 Cassandra 2、Solr 4、DataStax 4。

【问题讨论】:

    标签: solr4 cassandra-2.0 datastax


    【解决方案1】:

    您可以采用两种方法:

    1) 尝试在 dataconfig.xml 中使用 Transformer

    < entity name="Entity" transformer="RegexTransformer" Query="........>
    
    < field column="user_phones" splitBy="}"   />
    
    < /entity>
    

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

    2) 请尝试在 dataconfig.xml 中使用&lt;script&gt;..... &lt;/script&gt;

    Cassandra 与 Solr 的集成。 here

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢,这确实有效。不过感觉有点hacky。为了使它起作用,我的所有密钥都必须在前面加上相同的字符串,例如“user_id_123”。
    猜你喜欢
    • 2013-04-28
    • 2013-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2017-12-22
    • 2021-10-18
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多