Unsere App verwaltet Bücher im Besitz eines Benutzers mit einem Buch mit mehreren Dokumenten (PDFs, Word-Dokumente usw.). Die Startseite listet alle Bücher für einen Benutzer mit einer Schaltfläche zum Blättern auf, die die nächsten 10 Bücher lädt. Wenn ein Benutzer dann auf ein Buch klickt, wird es in einem neuen Bildschirm geöffnet und listet alle Dokumente für dieses Buch auf.Azure Suche Eltern und Kind Datensätze zurückgeben
Bis jetzt verwendeten wir WCF/entity framework, um alle auf der Homepage angezeigten Bücher abzurufen, dann azure search (verbunden mit einer sql-Ansicht), um die Dokumente für ein Buch zu erhalten, als es geöffnet wurde Paging und Sortieren.
Nun, obwohl wir auch die Liste aller Bücher für einen Benutzer aus azurblauen suchen wollen, so haben wir eine neue Tabelle erstellt, um die Buch-und Dokumentdaten zu halten, eine Zeile pro Dokument bedeutet den übergeordneten Buchnamen und Buch-ID wiederholt Für jede Reihe.
Unsere azurSuchIndex zeigt nun auf dieser Tabelle, und ich muss herausfinden, wie die Bücher für einen Benutzer mit Paging abzurufen und gegebenenfalls auch zu sortieren. Das Problem ist, dass ich eine bestimmte Auswahl für die Bücher brauche, aber azurblaue Suche nicht eindeutig und ich weiß nicht, wie viele Dokumente ein Buch haben könnte, so kann ich den Top-Parameter nicht auf 10. Ein Buch könnte haben 30 oder 40 Dokumente, was bedeutet, dass die ersten 40 Zeilen zum Beispiel nur für ein Buch sein könnten.
Ich habe versucht, eine Facette auf die Buch-ID, die Art von funktioniert und gibt mir die ID und Anzahl der Dokumente für jedes Buch, aber ich kann nicht scheinen, eine Sortierreihenfolge für die Facette angeben - die Reihenfolge ist anders zu der Reihenfolge, die ich für die Abfrage (BookId) festgelegt habe. Ich weiß auch nicht, wie man alle Bücher mit einer Facette bekommt - ich kann eine Count-Eigenschaft auf der Facette setzen, aber ich weiß nicht, wie viele Bücher ein Benutzer haben wird.
Unser Architekt sagt, ich sollte alle Reihen (die Tausende sein könnten) bekommen und sie im C# Code filtern, um 10 Bücher zu erhalten. Das scheint mir aber ziemlich ineffizient zu sein und fühlt sich nicht richtig an.
Also ich bin nicht sicher, ob dies der richtige Ansatz ist ..
- sollte ich getrennte azurSuchIndizes für Buch- und Belegdaten haben (die separate Tabellen verwenden?
- wie kann ich die Rückkehr top n Bücher aus dieser Tabelle
- kann ich eine Sortierreihenfolge für Facetten mit der C# SDK angeben? (Ich denke, dass es über die Rest API möglich ist)
- Wie bekomme ich eine Facette um alle Bücher für einen Benutzer zurückzugeben?
Hallo @Matthew danke für das Update. Ich habe einen neuen Suchindex und eine neue Tabelle für Buchdaten mit einer Zeile pro Buch erstellt und die Dinge scheinen soweit in Ordnung zu sein. Ich las über den Collection (Edm.String) Typ für einen Index, aber es war nicht wirklich intuitiv, zumindest nicht für mich. Glauben Sie, dass es zwei Nachteile hat, zwei Suchindizes zu verwenden? –
Es hängt davon ab, welche Attribute der Dokumente Sie suchen/filtern müssen. Müssen Sie in der Lage sein, nach DocumentName oder anderen Attributen des Dokuments zu suchen/zu filtern (wie der Inhalt des Dokuments oder etwas Ähnliches)? –
Ja, es gibt eine Reihe weiterer Textfelder in unserer Dokumententabelle, wie z. B. Gerätename, Standortadresse, Stadt, Straße usw. Alle diese Felder können im Index (für Dokumente) durchsucht werden. Der neue Index für die neue Tabelle (für Bücher) wird nur verwendet, um den Namen und die ID jedes Buches und die Anzahl der Dokumente, die jedes Buch hat, zurückzugeben. –