2013-07-24 4 views
5

Ich versuche eine Suche nach einem bestimmten Element durchzuführen, so dass ich einen durchsuchbaren Ausdruck innerhalb meiner Optionen habe. Ich möchte auch nach den Werten dieses Elements sortieren, also habe ich einen Elementbereichsindex für das Wertelement erstellt. Hier sind meine Suchoptionen, die hoffentlich macht die Dinge klar:MarkLogic Search API - Sortierung nach demselben Element wie der durchsuchbare Ausdruck

<options xmlns="http://marklogic.com/appservices/search"> 
     <term> 
      <term-option>case-insensitive</term-option> 
     </term> 
     <debug>true</debug> 
     <searchable-expression>/summary/name/value</searchable-expression> 
     <sort-order type="xs:string" direction="ascending"> 
      <element ns="" name="value"/> 
      <annotation>options for search institutions by name</annotation> 
     </sort-order> 
</options> 

Das Problem ist, dass, wenn es die Art hat es einen anderen Wert Knoten hinzufügt (Entnommen Suche: Bericht id = „SEARCH-FLWOR“)

...order by xs:string(($result//value)[1]) ascending return $result)[1 to 50] 

Statt:

...order by xs:string(($result)[1]) ascending return $result)[1 to 50] 

Wie verhindere ich es dies zu tun? Ich kann den durchsuchbaren Ausdruck nicht ändern, da das Element "name" ein anderes untergeordnetes Element hat, über das ich nicht suchen möchte. Ich kann auch den Namen des Sortierreihenfolge-Elements nicht leer lassen oder auf den aktuellen Knoten setzen. Es scheint, das wäre einfach, aber ich habe nichts gefunden, um das zu funktionieren.

Hilfe wäre sehr willkommen.

Antwort

4

Sie können <name> als Zielelement der durchsuchbaren Ausdruck verwenden, aber dann die Abfrage beschränken, nur innerhalb <value> suchen, indem sie ein <additional-query> fügte hinzu:

<options xmlns="http://marklogic.com/appservices/search"> 
     <term> 
      <term-option>case-insensitive</term-option> 
     </term> 
     <debug>true</debug> 
     <searchable-expression>/summary/name</searchable-expression> 
     <additional-query> 
      <cts:element-query xmlns:cts="http://marklogic.com/cts"> 
      <cts:element>value</cts:element> 
      <cts:and-query/> 
      </cts:element-query> 
     </additional-query> 
     <sort-order type="xs:string" direction="ascending"> 
      <element ns="" name="value"/> 
      <annotation>options for search institutions by name</annotation> 
     </sort-order> 
</options> 
+0

eine zusätzliche-Abfrage scheint Verwenden der Job zu erledigen. Danke für den Vorschlag. – Francium123