Problem z właściwości ograniczeniem jest to, że to tylko zmienia zakres jego fragment, a nie przyjmować atrybut name, aby ograniczyć wyszukiwanie tylko jedną właściwość. Jeśli dodasz <return-query>true</return-query>
zobaczysz, jakie będzie wynikowe zapytanie.
Istnieje kilka opcji, chociaż ..
Pierwsza opcja jest użycie <fragment-scope>properties</fragment-scope>
. Możesz użyć tego na najwyższym poziomie, aby zastosować go do wszystkich ograniczeń wyszukiwania, a także do ograniczenia, aby wpływać tylko na określone ograniczenia. Jest to względnie łatwy sposób na wymuszenie przeszukiwania zapytań na fragmentach właściwości zamiast na fragmentach dokumentów. Wadą jest jednak to, że nie wpłynie to na wyniki wyszukiwania, czyli fragmenty.
Aby wpłynąć na fragmenty tekstu, lepiej robić to, co sugeruje @mblakele, i używać wyszukującego wyrażenia: <searchable-expression>xdmp:document-properties()</searchable-expression>
. Wpłynie to zarówno na fragmenty, jak i zapytania, więc użycie tego spowoduje, że otrzymasz fragmenty wyszukiwania i zapytania będą przebiegać po fragmentach właściwości. Ograniczenie autora nadal nie ogranicza się jednak do właściwości twojego autora.
Po przeszukiwaniu przebiega fragmentów właściwości, ograniczając wyszukiwanie do konkretnej nieruchomości jest całkiem proste. To tylko element, jak każdy inny. Użyj ograniczenia elementu, wartości lub zakresu, aby to zadziałało.
Poniżej pewnego kodu do zilustrowania powyższego:
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
)
Czwarty przykład powinny dać wyniki, czego szukasz.
HTH!