2013-04-19 3 views
8

Ich habe eine SOLR-Abfrage, die alle Felder abholen sollte, die ich speichere, außer einem Feld.
Say I Felder haben, muss ich hart Code müssen die Felder I in der
&fl=[f],[f],[f],....[f]'
holen wollen Oder ist es eine Möglichkeit, etwas ähnliches zu
&fl=*,![f]'So schließen Sie Felder in einer SOLR-Abfrage aus

[f] zu tun steht für einen Feldnamen.

Antwort

12

Leider ist die Möglichkeit, einen Feldnamen über die Abfragezeichenfolge zu entfernen, immer noch eine ausstehende Verbesserungsanfrage. Weitere Informationen finden Sie unter SOLR-3191.

Bis diese Verbesserung implementiert ist, müssen Sie alle 19 Felder im Parameter fl angeben. Sie können jedoch Ihren Standard-RequestHandler /select aktualisieren, um die 19 Felder zu definieren, die Sie als Standardeinstellung zurückgeben möchten, die auf alle Abfragen angewendet werden, sofern sie nicht in der Abfragezeichenfolge überschrieben werden.

Hier ist eine modifizierte Version des Standard /select Request aus dem Beispiel solrconfig.xml ist:

<requestHandler name="/select" class="solr.SearchHandler"> 
    <!-- default values for query parameters can be specified, these 
    will be overridden by parameters in the request 
    --> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <int name="rows">10</int> 
     <str name="df">text</str> 
     <!-- Only showing 3 fields for this example --> 
     <str name="fl">field1,field2,field3</str> 
    </lst> 
    </requestHandler> 

Für weitere Informationen über diese Standardeinstellungen und Request Konfiguration finden Sie in RequestHandlers and SearchComponents in SolrConfig.

+3

ich diese Funktionalität wünschen haben. – skynss

6

Eine andere Option könnte sein: Felder, die Sie einschließen möchten, sollten ein gemeinsames Präfix verwenden; obendrein können Sie in Ihrem FL Globs verwenden. So zum Beispiel, dass die Vorsilbe unter der Annahme tobeincluded_ Sie einen fl Wert haben wie

tobeincluded_ *

0

Es ist ein weiterer einfacher Patch zur Verfügung, die den einfachen Fall löst sich hier: https://issues.apache.org/jira/browse/SOLR-9467 wenn es so funktioniert akzeptiert werden:

&fl=*,[fl.rm v="title"] 

Um das Titelfeld zu entfernen.

+0

Haftungsausschluss: Ich sollte wahrscheinlich erwähnen, dass ich diesen Patch geschrieben habe. – Gus

+0

lassen Sie uns wissen, wenn/wenn Sie akzeptiert werden. Ich kenne mich mit der Lucen/SOLR-Architektur nicht aus, aber können Sie das nicht als eigenständiges Plugin veröffentlichen, das an Ort und Stelle eingefügt werden kann? –

+1

Ich denke, es könnte möglich sein, die Hauptklasse zu paketieren und diese in einer Anfrage-Handler-Konfiguration zu verwenden, aber um sie zur Verwendung in '& fl anzuzeigen, musste ich den Namen zu einer Klasse in solr hinzufügen. Wie auch immer, der Patch wird seit gestern korrekt auf 6.2 Branch angewendet. Wenn du das aus Apache git anwählst, apply und build mit 'ant create-package' im Verzeichnis solr, das im Prinzip den gleichen Tarball wie 6.2 RC1 erzeugen soll. – Gus

0

Eine andere Option wäre die Verwendung des Document transformer ValueAugmenterFactory, um den tatsächlichen Rückgabewert des Feldes durch eine leere Zeichenfolge zu ersetzen.

Dies sollte funktionieren, wenn Ihre Anforderung ist einfach zu vermeiden, den Inhalt dieses Feldes zurückgeben.

Unten ist ein Beispiel der Inhalt des Titelfeld ersetzt:

&fl=*,title:[value v=""] 
Verwandte Themen