2016-07-20 64 views
0

我正在使用solr從cassandra表中檢索結果。solr不提取動態字段

表結構:

CREATE TABLE mytable (
    field1 uuid, 
    field2 text , 
    bfield blob, 
    cstdta_<text, text>, 
    PRIMARY KEY (field1) 
); 

表內容

INSERT INTO mytable VALUES (62c36092-82a1-3a00-93d1-46196ee77204,"test", { 'f1' : 'La Vita E La Felicita', 'f2' : 'Michele Bravi' }); 

我能夠直接查詢使用devcenter時,檢索結果。但是在使用solr查詢時,不會返回動態字段。

Solr的查詢響應:

{ 
    "responseHeader": { 
    "status": 0, 
    "QTime": 1 
    }, 
    "response": { 
    "numFound": 1, 
    "start": 0, 
    "docs": [ 
     { 
     "field1": "62c36092-82a1-3a00-93d1-46196ee77204", 
     "field2": "test" 

     } 
    ] 
    } 
} 

這裏是scheme.xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<schema name="autoSolrSchema" version="1.5"> 
<types> 
<fieldType class="org.apache.solr.schema.TextField" name="TextField"> 
<analyzer> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 

<fieldType class="org.apache.solr.schema.UUIDField" name="UUIDField"/> 
<fieldType class="org.apache.solr.schema.BinaryField" name="BinaryField"/> 
</types> 
<fields> 
<field indexed="true" multiValued="false" name="field1" stored="true" type="TextField"/> 
<field indexed="true" multiValued="false" name="field2" stored="true" type="TextField"/> 
<field indexed="true" multiValued="false" name="bfield" stored="true" type="BinaryField"/> 
<dynamicField indexed="true" multiValued="false" name="cstdta_*" stored="true" type="TextField"/> 
<field indexed="true" multiValued="false" name="cstdta_stc" stored="true" type="TextField"/> 
<copyField source="cstdta_*" dest="cstdta_stc"/> 
</fields> 
<uniqueKey>resid</uniqueKey> 
</schema> 

我添加了複印場以下this answer。但它似乎並不奏效。

UPDATE:

由於user3398164指出我需要在一個特定的格式插入動態領域的CustomData內。就我而言,我不得不使用此查詢插入:

INSERT INTO mytable VALUES (62c36092-82a1-3a00-93d1-46196ee77204,"test", { 'cstdtaf1' : 'La Vita E La Felicita', 'cstdtaf2' : 'Michele Bravi' }); 

現在我得到了想要的結果:

{ 
    "responseHeader": { 
    "status": 0, 
    "QTime": 1 
    }, 
    "response": { 
    "numFound": 1, 
    "start": 0, 
    "docs": [ 
     { 
     "field1": "62c36092-82a1-3a00-93d1-46196ee77204", 
     "field2": "test", 
     "cstdtaf1":"La Vita E La Felicita", 
     "cstdtaf2" : "Michele Bravi" 
     } 
    ] 
    } 
} 
+0

與此

+0

@AbhijitBashetti,這是一個錯字。編輯問題 – Sharun

+0

爲什麼multiValued =「false」表示字段cstdta_stc ...?multiValued = true | false 如果此字段可能包含每個文檔的多個值(即,它在文檔中可能出現多次),則爲true –

回答

1

@Sharun試試按下面的鏈接 https://docs.datastax.com/en/datastax_enterprise/4.6/datastax_enterprise/srch/srchDynFlds.html

提到插入數據

從參考網站複製:

在CQL中,要定義映射集合列,請使用與用於schema.xml中的字段相同的基本名稱 (no星號)。例如,對於 示例,請在schema.xml中使用dyna_ *,將dyna_用於 CQL地圖集合的名稱。

使用地圖鍵的類型文本。例如:

CREATE TABLE my_dynamic_table(。dyna_ map,。. 。);使用CQL,在每個地圖對的第一個組件中使用基本名稱作爲 前綴或後綴將數據插入到地圖中。使用前綴的地圖的格式 是:{prefix_literal:literal, prefix_literal:literal,。 。 。 }

例如,CQL地圖看起來像這樣: 'dyn_':{dyn_1:1,dyn_2: 2,dyn_3:3}