2016-05-12 10 views
0

Wie kann ich den Schnittpunkt zwischen einem vorhandenen Element Bereich Index und einer Folge von Wörtern auf eine optimierte Weise erhalten?Get Schnittmenge mit Element Bereich Index

Mein Punkt hier konzentriert sich auf Speicheroptimierung, ich weiß, dass ich die Daten mit CTS: Element-Werte abrufen und Kartenobjekte verwenden kann, um die Aufgabe zu erledigen. Aber warum sollte ich das, wenn es eine Abfrage gibt, die diese Schnittmenge mit dem zwischengespeicherten Bereichsindex direkt macht.

ex:

Bereich Index (test1, test2, test3) /Sequenz (test1, test4, test5)

Abfrageergebnis = test1

Zu wissen, dass dieser Bereich Index für ein Wort erstellt Liste existiert in einem Dokument. Ich versuche zu vermeiden, sie in ein separates Dokument zu legen und die Fragmentierung zu vermeiden.

Antwort

1

Ich glaube, das den Trick für Sie tun:

let $myIndex := "myIndex" 

let $sequence := ("one", "two two", "three") 

let $or-query := cts:or-query(($sequence ! cts:word-query(.))) 

return 
    cts:element-values(xs:QName($myIndex),(),(), cts:element-query(xs:QName($myIndex), $or-query)) 

Per Ihren Kommentar unten, es ist ein bisschen wie ein Hack, aber ich war in der Lage zu erreichen, was ich glaube, ist das gewünschte Ergebnis mit diesem:

fn:distinct-values(
    cts:search(//lastname, 
     cts:or-query(($sequence ! 
     cts:element-query(xs:QName("lastname"), 
      cts:element-value-query(xs:QName("lastname"), ., "self") 
     ) 
    )) 
)/string() 
) 

Ändern Sie einfach den XPath am Anfang als Ihr gewünschtes Element sowie den QName in element-query. Ob das schneller ist als Element-Werte und ob man die Werte in einer Karte überprüft, kann ich nicht sagen.

Ein dritter Ansatz, den Sie versuchen könnten, wenn diese Werte wirklich nur in einem einzigen Dokument ausschließlich zum Speichern von ihnen sind, wäre es, die Fragmentierung der Datenbanken Strategie zu ändern. Dann sollte mein Ansatz # 1 funktionieren. [Obligatorischer Haftungsausschluss über unbeabsichtigte Folgen, die sich daraus ergeben könnten]

+0

Vielen Dank @Rob S., ich stimme dir zu, wenn die Wörter in separaten Dateien stehen, was nicht mein Fall ist. Diese Abfrage gibt alle Bereichsindexeinträge zurück. –

+0

Hallo @Ahmad Tamimi, aktualisiert meine Antwort mit einem weiteren Code-Schnipsel zu versuchen. Viel Glück! –

+0

Hallo, @Rob S., nochmals vielen Dank. Das funktioniert für mich. Aber es ist langsamer als die Verwendung von Map-Objekt seit dieser Abfrage mit xPath. Ich glaube jedoch, dass Ihr dritter empfohlener Ansatz die erforderliche Arbeit ohne Beeinträchtigung der Leistung erledigen wird. –