Das Problem mit Eigenschaften Einschränkung ist, dass es nur das Fragment Umfang ändert, und akzeptiert keinen Namen Attribut um die Suche zu beschränken nur eine Eigenschaft auf. Wenn Sie <return-query>true</return-query>
hinzufügen, würden Sie sehen, was die resultierende Abfrage wäre.
Es gibt ein paar Optionen, obwohl ..
Erste Option ist <fragment-scope>properties</fragment-scope>
zu verwenden. Sie können dies auf oberster Ebene verwenden, um es auf alle Sucheinschränkungen anzuwenden, und auch pro Einschränkung, um nur bestimmte Einschränkungen zu beeinflussen. Es ist eine relativ einfache Möglichkeit, Suchabfragen so zu erzwingen, dass sie über Objektfragmente anstatt über Dokumentfragmente ausgeführt werden. Der Nachteil ist jedoch, dass es keine Suchtreffer, sogenannte Snippets, beeinflusst.
Um die Snippets zu beeinflussen, sollten Sie besser tun, was @mblakele vorschlägt, und durchsuchbaren Ausdruck verwenden: <searchable-expression>xdmp:document-properties()</searchable-expression>
. Dies wirkt sich sowohl auf Snippets als auch auf Suchanfragen aus. Wenn Sie dies verwenden, werden Sie Such-Snippets erhalten und die Abfragen über die Eigenschaftsfragmente laufen lassen. Die Einschränkung für Autoren beschränkt sich jedoch nicht auf Ihre Author-Eigenschaft.
Sobald die Suche nach Eigenschaftenfragmenten ausgeführt wird, ist die Suche auf eine bestimmte Eigenschaft sehr einfach. Es ist nur ein Element wie jedes andere. Verwenden Sie ein Elementwort, einen Wert oder eine Bereichsbeschränkung, um dies zu erreichen.
Im Folgenden einige Code die oben veranschaulichen:
xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search"
at "/MarkLogic/appservices/search/search.xqy";
(: original approach :)
let $options1 :=
<options xmlns="http://marklogic.com/appservices/search">
<constraint name="author">
<properties name="prop:Author"/>
</constraint>
<return-query>true</return-query>
</options>
let $results1 := search:search("author:Administrator", $options1, 1, 1)
(: using fragment-scope :)
let $options2 :=
<options xmlns="http://marklogic.com/appservices/search">
<fragment-scope>properties</fragment-scope>
<constraint name="author">
<properties name="prop:Author"/>
</constraint>
<return-query>true</return-query>
</options>
let $results2 := search:search("author:Administrator", $options2, 1, 1)
(: using searchable-expression :)
let $options3 :=
<options xmlns="http://marklogic.com/appservices/search">
<searchable-expression>xdmp:document-properties()</searchable-expression>
<constraint name="author">
<properties name="prop:Author"/>
</constraint>
<return-query>true</return-query>
</options>
let $results3 := search:search("author:Administrator", $options3, 1, 1)
(: using searchable-expression with an element word constraint :)
let $options4 :=
<options xmlns="http://marklogic.com/appservices/search">
<searchable-expression>xdmp:document-properties()</searchable-expression>
<constraint name="author">
<word>
<element name="Author" ns="http://marklogic.com/xdmp/property"/>
</word>
</constraint>
<return-query>true</return-query>
</options>
let $results4 := search:search("author:Administrator", $options4, 1, 1)
return (
$results1,
$results2,
$results3,
$results4
)
Das vierte Beispiel Ihnen die Ergebnisse, sollte Sie suchen.
HTH!