使用 op:from-lexicons 执行 op:join-inner 无法按预期使用 Optic API 工作

问题描述 投票:0回答:2

我使用

op:from-lexicons
访问计划进行以下光学查询:

op:from-lexicons((
        map:map()
            => map:with("lexiconUuid", cts:element-reference(xs:QName("lexiconUuid")))
            => map:with("elementInDocumentToFilter", cts:element-reference(xs:QName("elementInDocumentToFilter")))
            => map:with("documentUuid", cts:element-reference(xs:QName("documentUuid")))
    ),"lexiconView")
    => op:where(op:eq(op:view-col("lexiconView","elementInDocumentToFilter"), "Filter Value"))
    => op:group-by(op:view-col("lexiconView","lexiconUuid"), 
        op:count("countOfDocsMeetingFilter", "documentUuid", map:entry('values', 'distinct'))
    )
    => op:select((
        op:view-col("lexiconView","lexiconUuid"),
        op:as("hasCountOver0", op:gt(op:col("countOfDocsMeetingFilter"), 0))
    ))

当我将

op:result()
添加到此查询时,我得到如下输出:

lexiconView.lexiconUuid 有CountOver0
词典-uuid-1 真实
词典-uuid-2

此查询使用现有索引来返回

lexiconUuid
以及它是否出现在基于过滤器的任何文档中。当我尝试使用上面的查询作为
$rightPlan
op:join-inner
时,我没有得到任何结果(如,没有发生连接)。这是我使用上面的词典查询的查询:

op:from-view("schema", "table1")
    (: table2 contains the lexiconUuid element I want to join the lexicon query with :)
    => op:join-inner(op:from-view("schema", "table2"),
        op:on(
            op:view-col("table1", "someUuid"),
            op:view-col("table2", "someUuid")
        )
    )
    => op:join-inner(
        (: op:from-lexicons() access plan here :),
        op:on(
            op:view-col("table2", "lexiconUuid"),
            op:view-col("lexiconView", "lexiconUuid")
        )
    )

我知道一个事实是,

lexiconUuid
在加入
table2
之后就存在,并存在于
op:from-lexicons
查询中(即
lexicon-uuid-1
存在于
table2
中,所以它应该毫无问题地加入“lexiconView”)。我将此“lexiconView”复制为 TDE,连接按预期执行,但需要对现有数据进行聚合,因此我必须
op:group-by()
table1
中的所有列。我希望能够使用词典来避免另一个 TDE 并在更多列上执行分组/聚合。使用
table2
访问计划时我是否遗漏了什么?可以用在连接中吗?有人遇到过这个吗?
    

marklogic marklogic-10
2个回答
0
投票
op:from-lexicons

。我能够通过将排序规则添加到我的 TDE 列配置来解决该问题。

http://marklogic.com/collation/



0
投票

添加一些 where 子句,将查询结果集缩小到我希望匹配的几个特定记录。
  1. 打印出这些结果集。如果您发布该示例数据,那么其他人可能能够复制。
  2. 尝试使用
  3. <column> <name>uuid</name> <scalar-type>string</scalar-type> <val>uuid</val> <collation>http://marklogic.com/collation/</collation> </column>
  4.  进行复制
    
© www.soinside.com 2019 - 2024. All rights reserved.