2016-07-25 25 views
0

Ich verwende Solr, um Ergebnisse aus einer Cassandra-Tabelle abzurufen.Ändern dynamischer Feldtitel in Solr wählen Abfrage

Tabellenstruktur:

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

Tabelleninhalt

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' }); 

Ich bin in der Lage, die Ergebnisse mit solr Abfrage abzurufen.

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

Gibt es eine Möglichkeit die Feldnamen in Folge zu geben, so dass ich die dynamischen Felder abrufen kann, ohne den Feldnamen Präfix mit? Ich brauche wie dies zur Folge haben:

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

Update: Von DataStax documentaion, ich gefunden,

vermeiden oder die Verwendung von dynamischen Felder begrenzen. Lucene reserviert Speicher für jeden eindeutigen Feld- (Spalten-) Namen. Wenn Sie also eine Zeile mit den Spalten A, B, C und einer anderen Zeile mit B, D, E haben, weist Lucene 5 Blöcke des Speichers zu. Für Millionen von Zeilen ist der Heap unhandlich.

Gibt es einen besseren Weg, dynamische Filterung in Solr zu erreichen? Was ich brauche, ist Filter gegen benutzerdefinierte Felder, die für jeden Einsatz variieren können.

Antwort

1

Anstatt Ihr Dyn Feld custmdata_ aufzurufen rufen Sie es data und das sollte loswerden, das Bit, das Sie nicht wollen.

Entfernen Andernfalls wird das dyn Feld vorangestellt Etikett nicht unterstützt wird, aber Sie Felder mit fl zurück umbenennen: https://wiki.apache.org/solr/CommonQueryParameters#Field_alias

Wenn Sie sich über zu viele dyn Felder besorgt sind, versuchen Sie es mit einigen C * Sammlung Typ Umgehung wenn Sie sich dazu ein Szenario machen.

+0

Ich verwendete data1, data2 usw. als nur Beispiele. Es kann alles wie "Dateiname", "Temperatur" sein, wie die Verwendung bevorzugt. Also kann ich deinem ersten Ratschlag nicht folgen. – Sharun