我有一个简单的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地图推断)返回和搜索?
答案 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;。