2016-10-04 1 views
1

Ich verwende eine Anwendung, die Daten zu solr speichert. Leider kann dieser nur einzelne Werte in solr schreiben. Einige Daten haben jedoch mehrere Datumswerte. Um sie zu durchsuchen, brauche ich sie in einem mehrwertigen Datumsfeld.Solr geteilte Daten mit multivalue Feld

Ich hatte dieses Problem bereits mit einigen String-Werte, aber es gelöst, indem die Werte mit einem Separator Beitritt (so dass es als eine Zeichenfolge übertragen werden kann) und dann solr.PatternTokenizerFactory verwenden. diese

So habe ich versucht, das gleiche mit einem mehrwertigen Datumsfeld, aber solr verweigert:

FieldType: TrieDateField does not support specifying an analyzer 

Gibt es Möglichkeiten dieses auf der solr-Seite zu lösen übrig?

TLDR: Gibt es eine Möglichkeit mehrwertiges Daten

2015-07-29T16:50:00Z 
2016-04-08T18:15:00Z 

aus

2015-07-29T16:50:00Z$2016-04-08T18:15:00Z 

Vielen Dank im Voraus zu erhalten!

[EDIT]

sanjayduttindia richtig war. Es funktioniert super! Schließlich hatte ich die Arrays Werte in einer Iteration zu setzen ..

function processAdd(cmd) { 
    doc = cmd.solrDoc; 
    id = doc.getFieldValue("id"); 
    multiDate = doc.getFieldValue("sendebeginn_raw"); 
    dates = multiDate.split("$"); 
    dates.forEach(function (item) { 
     doc.addField("sendebeginn", item); 
    }); 
    logger.info("UpdateScript processed: "+id); 
} 

Antwort

2

StatelessScriptUpdateProcessorFactory, die die Verwendung von Update Prozessoren implementiert, wie Skripte während Aktualisierungsanforderung ermöglicht.
Wenn Solr das Dokument aktualisiert, erhalten wir den Feldwert, in dem mehrere Daten in StatelessScriptUpdateProcessorFactory kommen. Wir teilen den Wert auf und legen ihn in ein neues Feld.
Lets multiDate ist das String-Feld sagen, in der mehr Daten kommen und Datum mehrwertig Feld TDate als Feldtyp hat.

<field name="multiDate" type="strings"/> 
<field name="date" type="tdate" multiValued="true" indexed="true" stored="true"/> 

unten ist die Probe update-script.js.

function processAdd(cmd) { 
    doc = cmd.solrDoc; 
    multiDate = doc.getFieldValue("multiDate").toString(); 
    dates = multiDate.split("\\$"); 
    doc.setField("date",dates); 

} 
function processDelete(cmd) { 
    // no-op 
} 

function processMergeIndexes(cmd) { 
    // no-op 
} 

function processCommit(cmd) { 
    // no-op 
} 

function processRollback(cmd) { 
    // no-op 
} 

function finish() { 
    // no-op 
} 

Fügen Sie den StatelessScriptUpdateProcessorFactory Prozessor zum updateRequestProcessorChain in solrconfig.xml.

<processor class="solr.StatelessScriptUpdateProcessorFactory"> 
    <str name="script">updateProcessor.js</str> 
</processor> 

l

+0

Klingt sehr vielversprechend! Ich werde es versuchen. Vielen Dank! – anse

+0

Das funktioniert! Vielen Dank! Bearbeitete meine Frage, um ein funktionierendes Beispiel zu geben. – anse