2016-07-25 49 views
0

我正在使用solr從cassandra表中檢索結果。在solr select查詢中更改動態字段標題

表結構:

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

表內容

INSERT INTO mytable VALUES (62c36092-82a1-3a00-93d1-46196ee77204,"test1", { 'custmdata_data1' : 'data1value', 'custmdata_data2' : 'data2value' }); 
INSERT INTO mytable VALUES (e26690db-dd54-4b61-b002-d3c07125f359,"test2", { 'custmdata_data5' : 'data5value', 'custmdata_data1' : 'mydata1value' }); 

我能夠檢索使用Solr的查詢結果。

{ 
    "responseHeader": { 
    "status": 0, 
    "QTime": 1 
    }, 
    "response": { 
    "numFound": 2, 
    "start": 0, 
    "docs": [ 
     { 
     "field1": "62c36092-82a1-3a00-93d1-46196ee77204", 
     "field2": "test1", 
     "custmdata_data1":"data1value", 
     "custmdata_data2" : "data2value" 
     }, 
     { 
     "field1": "e26690db-dd54-4b61-b002-d3c07125f359", 
     "field2": "test2", 
     "custmdata_data5":"data5value", 
     "custmdata_data1" : "mydata1value" 
     } 
    ] 
    } 
} 

是否有任何方法來指定結果中的字段名稱,以便我可以檢索動態字段而不必使用字段名稱前綴?我需要的結果是這樣的:

{ 
     "responseHeader": { 
     "status": 0, 
     "QTime": 1 
     }, 
     "response": { 
     "numFound": 2, 
     "start": 0, 
     "docs": [ 
      { 
      "field1": "62c36092-82a1-3a00-93d1-46196ee77204", 
      "field2": "test1", 
      "data1":"data1value", 
      "data2" : "data2value" 
      }, 
      { 
      "field1": "e26690db-dd54-4b61-b002-d3c07125f359", 
      "field2": "test2", 
      "data5":"data5value", 
      "data1" : "mydata1value" 
      } 
     ] 
     } 
    } 

更新: 從datastax文件建立,我發現,

避免或限制使用的動態字段。 Lucene爲每個唯一的字段(列)名稱分配內存,所以如果你有一行A列, B,C,另一行B,D,E,Lucene分配5個塊的內存。對於數百萬行,堆很笨重。

那麼有沒有更好的方法來實現基於動態場的Solr過濾?我需要的是篩選針對每個插入可能不同的自定義字段。

回答

1

而不是調用你的dyn字段custmdata_稱之爲data,那應該擺脫你不想要的位。

否則除去DYN場前綴的標籤是不支持,但你可以重命名返回的字段與flhttps://wiki.apache.org/solr/CommonQueryParameters#Field_alias

如果你擔心有太多的DYN領域,試圖用C *集合類型要解決它如果你的情況適合這一點。

+0

我用data1,data2等作爲例子。它可以是任何像「文件名」,「溫度」作爲使用偏好。所以不能遵循你的第一個建議。 – Sharun