Ich habe eine Datenbank von XML-Dokumente enthält, die grob als solche aussehen:Marklogic - immer unterschiedliche Werte
<document>
<question_item>
<question>What is your name?</question>
</question_item>
<question_item>
<question>What is your address?</question>
</question_item>
...
</document>
Ich mag eine eigene Liste von Fragen einen Suchbegriff zu übernehmen zu können und dann zurück, wo dieser Begriff ist gefunden z Nach "Name" mit den obigen Daten zu suchen, würde ein Ergebnis zurückgeben, "Wie heißt du?".
Ich habe dies erfolgreich mit fn:distinct-values
implementiert, aber offensichtlich ist das nicht effizient.
Ich möchte dies mit CTS implementieren. Ich habe Folgendes versucht:
Dies führt jedoch dazu, dass Fragen zurückkommen, die keinen "Namen" im Fragetext haben. z.B. Im obigen Beispiel werden beide Fragen zurückgegeben. Ich denke, dies liegt daran, dass die Abfrage, die ich verwende, ungefiltert weitergegeben wird und daher alle Fragen von einem Fragment zurückgibt, wenn es eine Übereinstimmung für dieses Fragment gibt.
Ist diese Annahme richtig?
Was kann ich tun, um zu erreichen, was ich tun möchte - effizient?
Danke!
Danke wst, wirklich hilfreich. Seltsamerweise ist die zweite (Kompromiss-) Abfrage, die Sie zur Verfügung gestellt haben, viel schneller (10x) als die erste. Irgendeine Idee warum das wäre? Ich bin sehr froh, dass der zweite schnell ist. – Robert
@Robert Auch bei einem Speicher-Mapped-Bereichsindex sind Platzhalter (besonders führende Platzhalter) etwas teuer. Da Sie diese in der Abfrage mit dem universellen Index nicht benötigen, sieht es so aus, als ob in Ihrer Anwendung die Kosten für Platzhalter höher sind als die zu filternden Kosten. Die Waage könnte in die andere Richtung kippen, wenn Sie 10-100x die Anzahl der Dokumente und/oder Dokumente mit vielen weiteren Fehlalarmen haben, die gefiltert werden müssten.Grundsätzlich können die Größe, das Volumen und die Struktur Ihrer Dokumente einen großen Einfluss darauf haben, welche Art von Abfrage am schnellsten ist. – wst
Ausgezeichnete Antwort. Vielen Dank! – Robert