marklogic - 如何在 Optic API 中使用 fn :contains(), fn:starts-with() 和 fn:ends-with

标签 marklogic marklogic-10

之前我们使用FLOWR查询来满足我们的搜索需求,因为数据日益增加,所以我们决定使用索引来获得更好的搜索性能。

工作 FLOWR 查询(仅示例)

for $doc in collection("col1")
where fn:contains($doc//entityName/text(), "USA")
return document-uri($doc)

上面的查询正在运行,它返回一个文档 URI,现在我们正在尝试使用 Optic API 来满足相同的要求。

我们已经为 entityName 创建了一个元素范围索引,但不确定如何将上述 FLOWR 查询转换为光学查询。

上述 FLOWR 查询的等效光学查询是什么?,将来我们也计划使用 fn:starts-with() 和 fn:ends-with() 函数。

我们正在使用 MarkLogic 10.0-2.1

感谢任何帮助

最佳答案

创建 TDE 来投影实体属性后,等效的光学查询将类似于 XQuery 中的以下内容:

op:from-view(null, VIEW_NAME, '', op:fragment-id-col('docId'))
=> op:where(ofn:contains(op:col('entityName', 'USA'))
=> op:where(cts:collection-query(COLLECTION_NAME))
=> op:join-doc-uri('uri', op:fragment-id-col('docId'))
=> op:select('uri')
=> op:result()

在 XQuery 中,必须导入 ofn 库。

在SJS中,op.fn字段提供了等效的功能:

op.fromView(null, VIEW_NAME, '', op.fragmentIdCol('docId'))
  .where(op.fn.contains(op.col('entityName', 'USA'))
  .where(cts.collectionQuery(COLLECTION_NAME))
  .joinDocUri('uri', op.fragmentIdCol('docId'))
  .select('uri')
  .result()

使用的操作:

  1. fromView() 访问实体 View
  2. 第一个 where() 在查询执行期间过滤列的值
  3. 第二个 where() 将实体行限制为匹配源文档
  4. joinDocUri() 根据实体行的源文档连接 URI 词典
  5. select() 投影“uri”列,忽略不需要的 View 列。

joinDocUri() 是一种方便

.joinInner(
    op.fromLexicons({'uri':cts.uriReference()}, '', op.fragmentIdCol('uriDocId')),
    op.on(op.fragmentIdCol('docId'), op.fragmentIdCol('uriDocId'))
    )

Optic 表达式函数还包括 op.fn.startsWith()op.fn.endsWith()。一般来说,光学表达式可以使用一个函数,如果它两者兼而有之

  • 是内置的 - 换句话说,不需要导入或需要
  • 仅将其输入转换为输出 - 换句话说,纯粹是功能性的,没有副作用或环境敏感性

另请参阅此表达式函数列表:

https://docs.marklogic.com/guide/app-dev/OpticAPI#id_69308

希望有帮助,

关于marklogic - 如何在 Optic API 中使用 fn :contains(), fn:starts-with() 和 fn:ends-with,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65911520/

相关文章:

javascript - 在marklogic中使用Javascript遍历Json节点?

xquery - 在XQuery Marklogic中如何动态排序?

sparql - CTS 范围查询与 SPARQL 查询性能

marklogic - 在 MarkLogic 节点客户端 API 上选择要 eval() 的数据库

marklogic - 有没有查看/编辑/删除Marklogic文档的工具

hadoop - 马克逻辑 : Error while importing files using MLCP

indexing - 短语搜索-最佳索引设置

marklogic - 获取附加到特定数据库的所有林的总大小