In Solr, Wie die Abfrage für ein Feld für verschiedene Werte in einem mehrwertigen Feld
Ich wollen im Grunde Solr Suche, jeden Datensatz der das mehrwertige Feld für meine such-parameter.. Lesen Sie weiter für mein Beispiel:
Bin ich mit dem Solr index zu meine Daten. Ich habe die Anwendung Daten in parallelen arrays (in form von multi-valued fields) passend zu einem bestimmten Produkt. Siehe Folgendes Beispiel, wo Marke, Modell und Jahr sind mehrwertige Felder:
<-solr record start->
sku: 1234
make: acura, acura, acura
model: integra, rsx, rsx
year: 1997, 2004, 2000
engine: 3.4, 4.5, 4.5
<-solr record end->
Ich bin mit filter, Abfragen (&fq=) zu schmal meiner Auswahl. Das problem ist, wenn jemand sucht eine 2000 Acura Integra, es wird mit dem obigen Datensatz, aber da die Marke, Modell und Jahr Daten parallel kodiert, es gibt tatsächlich keine 2000 Acura Integra für dieses Produkt. Solr ist das matching der stellen in das Feld, das Modell in das Modell-Feld, und das Jahr, in dem Feld Jahr (wie es sollte) und die Rückkehr dieses Ergebnis respektieren und nicht mein Parallelität.
Meine Abfrage würde wie folgt Aussehen so weit:
fq=make:"acura"&fq=model:"integra"&fq=year:2000 (I would normally escape URL characters when I POST to Solr, this is just an example)
Also meine Lösung ist, erstellen Sie ein anderes mehrwertiges Feld, genannt die Zusammenfassung Feld,in dem ich alle Marke, Modell, Baujahr und andere Daten (wie Motor) zusammen, getrennt durch ein Leerzeichen. Es ist notwendig, um Anführungszeichen um die Worte, also Begriffe mit mehreren Wörtern nicht übereinstimmen-Suche-Parameter versehen. Das obige Beispiel würde nun so Aussehen:
<-solr record start->
sku: 1234
make: acura, acura, acura
model: integra, rsx, rsx
year: 1997, 2004, 2000
engine: 3.4, 4.5, 4.5
summary: "acura" "integra" "1997" "3.4", "acura" "rsx" "2004" "4.5", "acura" "rsx" "2000", "4.5"
<-solr record end->
Ich dann auf meine Abfrage die folgenden:
summary:(""acura" AND "integra" AND "2000")
Ich würde erwarten, dass, wenn ich Hinzugefügt, dass auf meine Anfrage, dass dieser Satz würde nicht mehr kommen, da es kein acura integra 2000 in der Zusammenfassung Bereich. Jedoch, diese doens T Arbeit. Der Rekord noch kommt. Ich bin ratlos. Hat jemand eine Lösung für dieses problem. Es wurde mich zu töten, für Tage.
Ich wollen im Grunde Solr Suche, jeden Datensatz der das mehrwertige Feld für meine such-parameter.. ist das möglich? Gibt es eine bessere Weise, das zu tun, was ich versuche zu tun?
Dank
InformationsquelleAutor Dan | 2010-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass das schema nicht ganz richtig ist. Sie brauchen, um vollständig denormalize Ihre Daten und erstellen Sie ein Dokument pro Fahrzeug. Was für ein "Fahrzeug" bedeutet, hängt davon ab, welche Art von sucht, die Sie ausführen. Zum Beispiel, ein mögliches schema wäre:
Dem Feld "übersicht" wäre ein copyField make+model+Jahre+Motoren
werfen Sie einen Blick auf Feld kollabiert: wiki.apache.org/solr/FieldCollapsing
Denn die Frage ist eine SKU (12345) passen mehrere Fahrzeuge. jede SKU + Fahrzeug ein, als seinen eigenen Rekord ist schön, aber betrachten Sie als Kunde ist schrecklich. Durch aufrollen jedes Fahrzeug (und Anwendungen) und befestigen Sie es an der gleichen SKU dass es passt, macht es mehr sichtbar. Howver, könnten Sie anzeigen 10 Anwendungen pro Seite, aber Sie haben nur 3 "Boxen", in denen ein Nutzer etwas kaufen kann. SO sagt es die Anzeige Punkte 1 bis 10, sondern nur 3 "Boxen" mit Bildern und ein "klicken Sie auf die Schaltfläche "kaufen "" aufgeführt ist.
Sorry Dan, aber diese Fragen sind wirklich spezifisch für Ihr Projekt, ich kann Sie nicht beantworten.
Es ist OK. Danke für die Hilfe trotzdem. Ich werde werfen Sie einen Blick auf das Feld Zusammenbricht
InformationsquelleAutor Mauricio Scheffer
Bin ich noch nicht sicher, wie zu pflegen Parallelität ohne ein gruppenergebnisfeld, aber ich habe herausgefunden wie es mit einem zusätzlichen Feld. Anstelle der Verwendung UND Anweisungen, die glaube ich Suche jeden Datensatz in das mehrwertige Feld für ein Spiel (UND jede ' ed Begriff könnte mit einer anderen Zeile, in der das Mehrwertige Feld, nicht unbedingt in der gleichen Zeile), die Sie stattdessen die genauen Bedingungen, die Sie suchen, in derselben Reihenfolge, wie Sie erstellt das ursprüngliche Protokoll und die ~ - operator.
Werfen Sie einen Blick auf das folgende Beispiel:
Im folgenden werden die Inhalte der summary-Feld in einer der Zeilen in das mehrwertige Feld, die ich wünschte, zu entsprechen:
"Honda" "Accord" "2004" "3.5L"
Hier ist die Abfrage, die ich ausgeführt werden:
summary_field:("\"Honda\" \"2004\"")
Obige Abfrage allein wird nicht funktionieren. Selbst wenn ich eine Funktion haben, legt Benutzer-Eingabe aus der Anwendung in der gleichen Reihenfolge, dass die original-Zusammenfassung-Feld gebaut, weil die Benutzer in der Anwendung können Sie ein Stück von Daten (Fabrikat, Modell, Jahr) in beliebiger Reihenfolge, es können auch andere Wörter zwischen den Daten, die ich bin versucht zu entsprechen. In der oben eample, ich möchte passend Honda 2004 zu diesem Datensatz. Allerdings Accord ist zwischen.
Zu diesem problem zu umgehen, verwenden Sie einfach die ~n operator, wobei n die maximale Anzahl von anderen Bedingungen zwischen den Begriffen Ihr suchen. Also, wenn ich stattdessen verwenden:
summary_field:("\"Honda\" \"2004\""~1)
Ich sage, dass zwischen Honda und 2004, gibt es eine Möglichkeit, dass es 1 weitere Wort. Daher, dies vor der Abfrage übereinstimmen. Auch wenn Sie mehrere Begriffe, um die Zusammenfassung Feld, solange Sie die Abfrage mit den Werten in der gleichen Reihenfolge, und Ihre Logik fuzzy-Suche verwendet eine Zahl, die die maximale Entfernung zwischen 2 Werten, wird die Abfrage immer korrekt entsprechen Sie die richtige Zusammenfassung-Feld ein. Also, wenn du 20 Felder, die Sie hinzufügen, um Ihre Zusammenfassung Feld zu pflegen, Parallelität, den Sie einfach benutzen müssen, um ~18, so dass die maximal mögliche Distanz in einer worst-case-Szenario, zwischen den Worten, die sein könnte, nahm durch den Benutzer.
InformationsquelleAutor Dan
Können Sie nicht einfach eine Abfrage wie folgt?
I. e. Ohne die Anführungszeichen um die Marke und das Modell.
InformationsquelleAutor CraftyFella