2016-09-14 1 views
0

In unserem Szenario erhalten wir eine unbekannte Postanschrift in einem Zeichenfolgenformat mit unbekanntem Adressformat. Wir müssen die Suche mit der angegebenen Postadresse über alle Felder ausführen und die beste Übereinstimmung für die Abfrage finden.So geben Sie nur Ergebnisse zurück, wenn vier Pflichtfelder in Solr vorhanden sind

Wenn wir jedoch keine exakte Übereinstimmung für die 4 Pflichtfelder haben - dh SOLR liefert ähnliche Ergebnisse (für mindestens 1 Pflichtfeld), dann sollten KEINE Ergebnisse angezeigt werden.

Die 4 Pflichtfelder sind BuildingNumber, LocPressName, County und PostalDistrict mit den anderen Suchfeldern in der schema.xml Datei wie folgt definiert -

<field name="uid" stored="true" indexed="true" type="uuid" default="NEW"/> 
<field name="UnitNumber" stored="true" indexed="true" type="text_general"/> 
<field name="UnitName" stored="true" indexed="true" type="text_general"/> 
<field name="BuildingNumber" stored="true" indexed="true" type="exactish"/> 
<field name="BuildingName" stored="true" indexed="true" type="text_general"/> 
<field name="LocPressName" stored="true" indexed="true" type="exactish"/> 
<field name="PostalDistrict" stored="true" indexed="true" type="exactish"/> 
<field name="County" stored="true" indexed="true" type="exactish"/> 
<field name="AddressId" stored="true" indexed="true" type="text_general"/> 
<field name="ExchangeCode" stored="true" indexed="true" type="text_general"/> 
<field name="PreviousCustomerName" stored="true" indexed="true" type="text_general"/> 
<field name="Eircode" stored="true" indexed="true" type="text_general"/> 

Ich bin ziemlich neu in Solr, und ich bin nicht sicher, wie um diese Abfrage zu erzeugen, die nur dann die besten Ergebnisse liefert, wenn sie eine Übereinstimmung für ALLE VIER Pflichtfelder findet.

Antwort

0

Ohne den genauen Typ Ihres exactish Feldes, ist es schwer zu sagen, aber unter der Annahme, dass es ein StrField ist. Die grundlegende, explizite Version:

q=(BuildingNumber:18 AND LocPressName:Foo AND 
County:Forthershire AND PostalDistrict:Bar) AND searchField:Query 

.. wo Search ist ein Bereich, in dem alles, was man als ein text_general Feld kopiert wurde gesucht werden soll. Sie können dies bei Bedarf durch alle anderen Felder ersetzen.

Eine weitere Option:

q=Query&defType=edismax&qf=UnitNumber UnitName .. etc&fq=BuildingNumber:18 AND 
LocPressName:Foo AND County:Forthershire AND PostalDistrict:Bar 

Dies funktioniert auf die gleiche, aber erlaubt eine freie Form Abfrage durch die edismax Abfrageparser verwenden. Die fq wendet einen Filter auf Ihre Ergebnismenge an, wobei die Dokumente haben, damit sie dem Filter entsprechen, der in der Ergebnismenge berücksichtigt werden soll. Es beeinflusst jedoch nicht, wie ein Dokument bewertet wird.

+0

Vielen Dank für Ihren Vorschlag, aber es scheint die angegebene Adresse zu teilen, was nicht möglich ist. Das Problem ist, dass wir die Adresse als unbekannte Zeichenfolge mit unbekanntem Format erhalten. –

+0

Wie erhalten Sie also alles in die spezifischen Felder in Ihrem Schema? – MatsLindh

+0

Wir erhalten die beste Übereinstimmung aus Dokumenten ohne Bedeutung für Pflichtfelder. Meaning, Pflichtfelder enthalten Werte, die nicht mit den Daten aus der angegebenen Zeichenfolge (von unbekanntem Format) verwandt sind - Ich werde ein Beispiel veröffentlichen ... –

Verwandte Themen