MarkLogic XQueryサンプル

Document

Insert Document

XMLドキュメントを登録する。

Options無しで、XMLドキュメントを登録する。

xquery version "1.0-ml";

xdmp:document-insert("/book/101059632.xml",
  <books>
    <book id="101059632" category="プログラミング">
      <title>Javaプログラミング</title>
      <author>エーディン</author>
      <pubDate>2017-10-11</pubDate>
      <pages>880</pages>
      <price>30.0</price>
    </book>
  </books>
)

Optionを指定して、XMLドキュメントを登録する。

xquery version '1.0-ml';

xdmp:document-insert("/book/101059633.xml",
  <books>
    <book id="101059633" category="投資">
      <title>株式投資の基本</title>
      <author>エーディン</author>
      <pubDate>2018-02-11</pubDate>
      <pages>123</pages>
      <price>14.0</price>
    </book>
  </books>,
  <options xmlns="xdmp:document-insert">  
    <permissions>{xdmp:default-permissions()}</permissions>
    <collections>{
      <collection>stock</collection>,
      for $coll in xdmp:default-collections()
      return <collection>{$coll}</collection>
    }</collections>
    <metadata>{
      map:map() => map:with("country", "japan")
                => map:with("role", "administrator")
    }</metadata>
    <quality>10</quality>
  </options>
)

map:map形式のOptionを指定して、XMLドキュメントを登録する。

xquery version '1.0-ml';

xdmp:document-insert("/book/101059634.xml",
  <books>
    <book id="101059634" category="OutSystems">
      <title>OutSystems開発</title>
      <author>エーディン</author>
      <pubDate>2018-03-04</pubDate>
      <pages>253</pages>
      <price>23.0</price>
    </book>
  </books>,
  map:map() => map:with("collections", ("book", "outsystems"))
            => map:with("quality", 2)
)

テキストドキュメントを登録する。

xquery version "1.0-ml";

xdmp:document-insert("/text-doc.txt",
  text { "This is a text document." }
)

Load Document

ローカルファイルをMarkLogicに取り込む。

xquery version "1.0-ml";

xdmp:document-load("c:\book\101059634.xml",
  <options xmlns="xdmp:document-load">
    <uri>/book/101059634.xml</uri>
    <permissions>{xdmp:default-permissions()}</permissions>
    <collections>
      <collection>all</collection>
      <collection>classics</collection>
      <collection>fiction</collection>
    </collections>
    <format>xml</format>
    <repair>full</repair>
  </options>
)

Delete Document

ドキュメントを削除する。

xquery version "1.0-ml";

xdmp:document-delete("/book/101059632.xml")

Repace Node

ドキュメント内項目を修正する。

XMLドキュメントのノードを修正する。

xdmp:document-insert("/example.xml",
  <a><b>bbb</b></a>
);

xdmp:node-replace(doc("/example.xml")/a/b,
  <c>ccc</c>
);

JSONドキュメントの項目を修正する。

xdmp:document-insert("/foo.json",
  object-node {"foo":"this is a value"}
);

xdmp:node-replace(fn:doc("/foo.json")/foo,
  text{"this is a different value"}
);

テキストドキュメントを修正する。

xdmp:document-insert("/mydir/doc.txt",
  text{"This is a line of text."}
);

xdmp:node-replace(doc("/mydir/doc.txt")/text(),
  text{
    concat(doc("/mydir/doc.txt")/text(), "
    This is another line of text.")
  }
);

Insert Child Node

ドキュメントに子項目/属性を追加する。

ドキュメントに子項目を追加する。

xdmp:document-insert("/example.xml",
  <a/>
);

xdmp:node-insert-child(doc("/example.xml")/a,
  <b>bbb</b>
);

ドキュメント項目に属性を追加する。

xdmp:document-insert("/example.xml",
  <a/>
);

xdmp:node-insert-child(doc("/example.xml")/a,
  attribute b { "bbb" }
);

Insert Node Before

指定項目の前に横目を追加する。

xdmp:document-insert("/example.xml",
  <a><b>bbb</b></a>
);

xdmp:node-insert-before(fn:doc("/example.xml")/a/b,
  <c>ccc</c>
);

Insert Node After

指定項目の後に横目を追加する。

xdmp:document-insert("/example.xml",
  <a><b>bbb</b></a>
);

xdmp:node-insert-after(fn:doc("/example.xml")/a/b,
  <c>ccc</c>
);

Collection

Add Collections

ドキュメントにコレクションを追加する。

xquery version '1.0-ml';

xdmp:document-add-collections(
  "/book/101059632.xml",
  ("book", "text", "java")
)

Set Collections

ドキュメントのコレクションを上書きさる。
指定されていない既存のコレクションは削除される。

xquery version '1.0-ml';

xdmp:document-set-collections(
  "/book/101059632.xml",
  ("book", "stock")
)

Remove Collections

ドキュメントからコレクションを削除する。

xquery version '1.0-ml';

xdmp:document-remove-collections(
  "/book/101059632.xml",
  ("stock")
)

Properties

Add Properties

xquery version '1.0-ml';

xdmp:document-add-properties(
  "/book/101059634.xml", (
    <priority>1</priority>,
    <status>unedited</status>
  )
)

Set Properties

xquery version '1.0-ml';

xdmp:document-set-properties(
  "/book/101059634.xml", (
    <priority>1</priority>,
    <kind>unedited</kind>
  )
)

Set Property

xquery version '1.0-ml';

xdmp:document-set-property(
  "/book/101059634.xml",
  <status>active</status>
)

Remove Properties

xquery version '1.0-ml';

xdmp:document-remove-properties(
  "/book/101059634.xml", (
    fn:QName("", "status")
  )
)

MetaData

Put MetaData

xquery version '1.0-ml';

xdmp:document-put-metadata(
  "/book/101059632.xml", map:map(
    <map:map xmlns:map="http://marklogic.com/xdmp/map">
      <map:entry key="country">
        <map:value>japan</map:value>
      </map:entry>
      <map:entry key="role">
        <map:value>administrator</map:value>
      </map:entry>
    </map:map>
  )
)

Set MetaData

xquery version '1.0-ml';

xdmp:document-set-metadata(
  "/book/101059632.xml", map:map(
    <map:map xmlns:map="http://marklogic.com/xdmp/map">
      <map:entry key="city">
        <map:value>Tokyo</map:value>
      </map:entry>
      <map:entry key="role">
        <map:value>Manager</map:value>
      </map:entry>
    </map:map>
  )
)

Remove MetaData

xquery version '1.0-ml';

xdmp:document-remove-metadata("/book/101059632.xml", ("country"))

Get Range Element Indexes

xquery version "1.0-ml";

import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy";

let $config := admin:get-configuration()

return admin:database-get-range-element-indexes($config, xdmp:database("Teaching") )

Add Range Element Index

xquery version "1.0-ml";

import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy";

let $config := admin:get-configuration()
let $dbid := xdmp:database("Teaching")
let $index := admin:database-range-element-index(
  "string", 
  "", 
  "title", 
  "http://marklogic.com/collation/",
  fn:false()
)
let $spec := admin:database-add-range-element-index($config, $dbid, $index)

return admin:save-configuration-without-restart($spec)

Delete Range Element Index

xquery version "1.0-ml";

import module namespace admin = "http://marklogic.com/xdmp/admin" at "/MarkLogic/admin.xqy";

let $config := admin:get-configuration()
let $dbid := xdmp:database("Teaching")
let $index := admin:database-range-element-index(
  "string",
  "",
  "title",
  "http://marklogic.com/collation/",
  fn:false()
)
let $spec := admin:database-delete-range-element-index($config, $dbid, $index)

return admin:save-configuration-without-restart($spec)

Search

xquery version '1.0-ml';

import module namespace search = 'http://marklogic.com/appservices/search' at '/MarkLogic/appservices/search/search.xqy';

search:search("TITLE:プログラミング AND AUTHOR:エーディン AND PAGES:880", 
  <options xmlns='http://marklogic.com/appservices/search'>
    <constraint name="TITLE">
      <word>
        <element name="title"/>
      </word>
    </constraint>
    <constraint name="AUTHOR">
      <value>
        <element name="author"/>
      </value>
    </constraint> 
    <constraint name="PAGES">
      <value>
        <element name="pages"/>
      </value>
    </constraint>
    <return-facets>true</return-facets>
    <return-results>true</return-results>
    <return-qtext>true</return-qtext>
    <return-metrics>false</return-metrics>
  </options>
)
xquery version '1.0-ml';
cts:search(
  fn:doc(),
  cts:and-query((
    cts:word-query("java"),
    cts:directory-query(("/book/"), "1"),
    cts:element-word-query(xs:QName("title"), "java"),
    cts:element-range-query(xs:QName("price"), ">=", xs:decimal(20))
    (:cts:element-range-query(xs:QName("pubDate"), "<=", xs:date("2000-01-01")):)
  )),
  cts:score-order("descending")
)[1 to 2]

Facets

xquery version '1.0-ml';

import module namespace search = 'http://marklogic.com/appservices/search' at '/MarkLogic/appservices/search/search.xqy';

search:search("Java", 
  <options xmlns='http://marklogic.com/appservices/search'>
    <constraint name='default'>
      <collection prefix='' facet='true'></collection>
    </constraint>
    <constraint name='title'>
      <range type="xs:string" facet="true">
       <element name="title"/>
      </range>
    </constraint>
    <constraint name='price'>
      <range type="xs:decimal" facet="true">
       <element name="price"/>
      </range>
    </constraint>
    <transform-results apply="raw" />
    <return-facets>true</return-facets>
    <return-results>false</return-results>
    <return-qtext>false</return-qtext>
    <return-metrics>false</return-metrics>
  </options>
)

Suggestion

xquery version "1.0-ml";

import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy";

search:suggest("java",
  <options xmlns="http://marklogic.com/appservices/search">
    <default-suggestion-source>
      <range type="xs:string" collation="http://marklogic.com/collation/" >
        <element name="title"/>
      </range>
    </default-suggestion-source>
  </options>
)