2016-07-25 12 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" 
     } 
    ] 
    } 
} 

フィールド名をプレフィックスなしで取得できるように、結果にフィールド名を指定する方法はありますか?私は、こと

回避または動的なフィールドの使用を制限した、datastax documentaionから :

{ 
     "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" 
      } 
     ] 
     } 
    } 

アップデート:私はこのような結果が必要です。 Luceneはそれぞれ のメモリに一意のフィールド(列)名を割り当てるため、列A、列番号が B、C、B、D、Eの行がある場合、Luceneは という5つのチャンクを割り当てます。数百万行の場合、ヒープは扱いにくいです。

したがって、Solrで動的フィールドベースのフィルタリングを実現するには、より良い方法がありますか?私が必要とするのは、挿入ごとに異なる可能性のあるカスタムフィールドに対してフィルタをかけることです。

答えて

1

dynフィールドをcustmdata_と呼ぶのではなく、dataと呼んでください。これは望ましくないビットを取り除くはずです。

それ以外の場合DYNフィールドプリペンドラベルがサポートされていませんが、あなたはflで返されるフィールドの名前を変更することができ取り除く:あなたはあまりにも多くのDYNフィールドを持っていることについて心配している場合は、いくつかのC *のコレクション型でそれを回避しようとhttps://wiki.apache.org/solr/CommonQueryParameters#Field_alias

シナリオがそれに役立つならば。

+0

data1、data2などを例として使用しました。それは "ファイル名"、 "温度"のようなものを使用することができます。あなたの最初のアドバイスに従うことができません。 – Sharun