首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Optic中使用fn: in (),fn:starts with()和fn: and with

如何在Optic中使用fn: in (),fn:starts with()和fn: and with
EN

Stack Overflow用户
提问于 2021-01-27 01:07:02
回答 1查看 154关注 0票数 1

更早的时候,我们使用FLOWR查询来满足我们的搜索需求,因为数据日益增加,所以我们决定使用索引来提高搜索性能。

工作流程查询(仅示例)

代码语言:javascript
复制
for $doc in collection("col1")
where fn:contains($doc//entityName/text(), "USA")
return document-uri($doc)

上面的查询是工作的,它返回一个文档URI,现在我们尝试使用Optic来满足同样的需求。

我们已经为entityName创建了元素范围索引,但不确定如何将上面的FLOWR查询转换为Optic查询。

,对于上面的FLOWR查询,什么是等价的Optic ?,将来我们也计划使用fn:starts with()和fn: and with()函数。

我们使用的是MarkLogic 10.0-2.1

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-27 17:27:43

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

代码语言:javascript
复制
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字段提供了等价的函数:

代码语言:javascript
复制
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()访问实体视图
  2. 查询期间对列值的第一个where()过滤器约束实体行匹配源documents
  3. The joinDocUri()基于实体行
  4. 的源文档select()项目' URI‘列,忽略不必要的视图列。

<代码>G 220

joinDocUri()是一个方便

代码语言:javascript
复制
.joinInner(
    op.fromLexicons({'uri':cts.uriReference()}, '', op.fragmentIdCol('uriDocId')),
    op.on(op.fragmentIdCol('docId'), op.fragmentIdCol('uriDocId'))
    )

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

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

还请参见以下表达式函数列表:

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

希望这有帮助,

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65911520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档