2016-04-19 21 views
0

搜索我有一個簡單的卡桑德拉KF:如何返回,並通過動態域在DSE搜索

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獲取它們的值。 A記錄:

cass[email protected]: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': '[email protected]0aa4e6dd1', 'message-id': '[email protected]f8a75e811', 'to': '"[email protected]"@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 &縮進= true

都返回空集(但應匹配上述文檔)。

感覺就像我錯過了什麼,但我無法弄清楚什麼。 Solr管理員報告「標題*」字段存在,並被正確索引,而不是。

所以,問題:如何在DSE中通過動態字段(從Cassandra地圖推斷)返回並搜索?

回答

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地圖名稱的形式爲「_」以便您的動態字段看起來像:'headers_component-type-0'。

+0

雖然這對我來說確實沒有任何意義,但Cassandra知道數據在'headers'映射中,而模式是由Cassandra創建的,因此它必須能夠將列的名稱預先指定爲名稱Solr字段提交索引時,不是嗎? –

相關問題