我正在使用solr从cassandra表中检索结果。
表格结构:
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 documentaion,我发现了,
避免或限制使用动态字段。 Lucene为内存分配内存 每个唯一字段(列)名称,因此如果您有一列A列, B,C和另一行B,D,E,Lucene分配5个块 记忆。对于数百万行,堆很笨重。
那么在Solr中有更好的方法来实现基于动态场的滤波吗?我需要的是过滤每个插入可能不同的自定义字段。
答案 0 :(得分:2)
而不是调用您的dyn字段custmdata_
,而不是将其称为data
,而应该摆脱您不想要的位。
不支持删除dyn字段前置标签,但您可以使用fl
重命名返回的字段:https://wiki.apache.org/solr/CommonQueryParameters#Field_alias
如果您担心有太多的dyn字段,请尝试使用某种C *集合类型解决它,如果您的情况适用于此。