如何在DSE搜索

时间:2016-04-19 08:01:42

标签: datastax-enterprise

我有一个简单的Cassandra KF:

create table messages (
  id varchar,
  headers map<varchar, varchar>,
  primary key (id));

该表获取自动生成的Solr索引。 headers字段的值将与您在电子邮件标头中的预期值相近。我可以看到Solr为标题生成以下行:

<dynamicField indexed="true" multiValued="false" name="headers*" stored="true" type="TextField"/>

但是,我无法在标题中找到任何内容,也无法使用Solr API获取其值。记录:

cassandra@cqlsh:tpb> SELECT id, headers FROM messages;

1492cc10-046d-11e6-a332-55ae2575ea1a | {'component-count': '1', 'component-type-0': 'Document-Upload', 'consumer-behalf': 'true', 'date': 'Sun Apr 17 2016 00:22:02 GMT-0700 (PDT)', 'from': '718bcc80-9def-11e5-a837-0800200c9a66@1a4de124-5761-4668-9e9d-a880aa4e6dd1', 'message-id': '1492cc10-046d-11e6-a332-55ae2575ea1a@32d2a682-af07-4108-a15a-de6f8a75e811', 'to': '"mark-watney@cool-dude"@32d2a682-af07-4108-a15a-de6f8a75e811', 'transaction-id': '14585b20-046d-11e6-a332-55ae2575ea1a'}

运行这两个查询并不会返回任何标题值(请注意,为了便于阅读,任何URL编码都会反转):

...select?q=id:1492cc10-046d-11e6-a332-55ae2575ea1a&fl=id,headersconsumer-behalf&wt=json&indent=true
...select?q=id:1492cc10-046d-11e6-a332-55ae2575ea1a&fl=id,headers*&wt=json&indent=true

按标题值搜索似乎也没有结果,例如

...选择Q = headersdate:周日及安培; FL = ID&安培;重量= JSON&安培;缩进=真 ...选择Q = headersconsumer-代表:真安培; FL = ID&安培;重量= JSON&安培;缩进=真

都返回空集(但应与上述文档匹配)。

感觉我错过了一些东西,但我无法弄清楚是什么。 Solr管理员报告&#34;标题*&#34;字段存在,并正确索引,什么不是。

那么,问题是:如何在DSE中按动态字段(从Cassandra地图推断)返回和搜索?

1 个答案:

答案 0 :(得分:0)

CQL映射中的键需要添加动态字段名称:

1492cc10-046d-11e6-a332-55ae2575ea1a | {'headerscount': '1', 'headerstype-0': 'Document-Upload',...

1492cc10-046d-11e6-a332-55ae2575ea1a | {'headerscomponent-count': '1', 'headerscomponent-type-0': 'Document-Upload',...

建议CQL中的地图名称格式为&#39; _&#39;这样你的动态字段就像:&#39; headers_component-type-0&#39;。