在solr select query

时间:2016-07-25 05:45:56

标签: solr cassandra datastax

我正在使用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中有更好的方法来实现基于动态场的滤波吗?我需要的是过滤每个插入可能不同的自定义字段。

1 个答案:

答案 0 :(得分:2)

而不是调用您的dyn字段custmdata_,而不是将其称为data,而应该摆脱您不想要的位。

不支持删除dyn字段前置标签,但您可以使用fl重命名返回的字段:https://wiki.apache.org/solr/CommonQueryParameters#Field_alias

如果您担心有太多的dyn字段,请尝试使用某种C *集合类型解决它,如果您的情况适用于此。