如何知道MarkLogic数据库中不同的名称空间?

时间:2018-08-02 16:56:28

标签: xquery marklogic marklogic-9

我在MarkLogic服务器中有一个数据库。该数据库有许多集合。其中一些集合具有名称空间,而某些具有不同的名称空间。要知道不同的名称空间的查询是什么?我的目标是构建一个搜索应用程序,该应用程序将允许用户使用搜索栏并使文档从最相关的集合中返回。由于所有集合都具有不同的xml结构,因此我也想基于集合和搜索来自定义文档的显示。

3 个答案:

答案 0 :(得分:2)

但是您对我的问题尚不清楚,但是如果您想从数据库中获取所有唯一的名称空间,则可以运行:

fn:distinct-values(//namespace-uri())

,如果您想从数据库中获取所有唯一集合(关于数据库的集合词汇):

cts:collections()

,如果您只想对特定集合执行搜索:

在搜索中:搜索用途:

<additional-query>{cts:collection-query('collectionName')}</additional-query>

在cts:search中使用:

cts:collection-query(("reports", "analysis")))

答案 1 :(得分:1)

获取数据库中唯一集合列表的一种方法是使用App Services Search API。您可以在搜索选项中指定一个集合约束,它将返回唯一的集合。下面的示例指定了没有前缀的集合约束,然后返回构面值的列表以及为每个集合计算的文档数。

(: insert test documents here :)
xquery version "1.0-ml";
for $i in 0 to 5
  let $collection := "https://example.com/" || $i
  for $j in 0 to $i
    return xdmp:document-insert("/example-doc/" || $i || "-" || $j, <example/>, (), $collection);

(: Use search API to get collections as a facet :)
xquery version "1.0-ml";
import module namespace search = 
  "http://marklogic.com/appservices/search"
  at "/MarkLogic/appservices/search/search.xqy";

(: build a collection constraint facet :)
let $options := 
  <options xmlns="http://marklogic.com/appservices/search">
    <constraint name="collections">
      <collection prefix="" facet="true" />
    </constraint>
  </options>

(: return facets ordered by the number of documents in each collection :)
let $facets := search:search("", $options)/search:facet/search:facet-value
for $facet in $facets
   order by $facet/@count descending
   return (element collection {($facet/@name, $facet/@count)})

返回:

<collection name="https://example.com/5" count="6"/>
<collection name="https://example.com/4" count="5"/>
<collection name="https://example.com/3" count="4"/>
<collection name="https://example.com/2" count="3"/>
<collection name="https://example.com/1" count="2"/>
<collection name="https://example.com/0" count="1"/>

答案 2 :(得分:0)

我在MarkLogic上构建的应用程序最典型地看到的是,它们对所有文档类型都具有单个搜索ui,或者对每种文档类型都具有单独的搜索ui。您始终可以跨任何文档类型进行全文搜索,并且可以定义和显示构面,无论它们适用于全部文档还是仅适用于部分文档。例如,集合名称可以是一个构面,但您也可以有一个名为Keyword的构面,它仅适用于两个集合,而另一个名为Company的构面则适用于其他三个集合。

简而言之,请考虑一下您想首先提供哪些最终用户功能,然后再考虑如何在技术上实现该功能。我怀疑知道名称空间确实对搜索ui至关重要,并且很可能仅在索引级别才重要。

HTH!