【问题标题】:MarkLogic Partial search & formula valuesMarkLogic 部分搜索和公式值
【发布时间】:2020-01-17 14:42:05
【问题描述】:

MarLogic 9.0.8.2

我们在MarkLogic中有如下xml数据

   1.
<group>
    <formula>
        <item>Al</item>
        <role>sur</role>
    </formula>
    <formula>
        <item>As</item>
        <role>sur</role>
    </formula>
    <formula>
        <item>Ga</item>
        <role>sur</role>
    </formula>
</group>

2. 
<group>
    <formula>
        <item>GaAlAs-GaAs</item>
        <role>int</role>
    </formula>
<group>

3.
<group>
    <formula>
        <item>AlGaAs</item>
        <role>ss</role>
    </formula>
<group>
4.
<group>
    <formula>
        <item>GaNAs</item>
        <role>ss</role>
    </formula>
<group>

现在如果用户搜索“(Ga AND As)”,则应该只检索第二个和第三个 xml,因为它包含在同一个项目中

如果用户搜索“Ga AND As”,所有记录

所以只是想知道如何编写与第一种情况相同的 xQuery,它将包含所有搜索词,而在第二种情况下,它将包含给定的词。

这种搜索请求的最佳方法是什么

【问题讨论】:

    标签: search formula xquery marklogic partial


    【解决方案1】:

    如果您可以影响最终用户改为写item:(Ga AND As),您可以获得您正在寻找的行为。如果是这样,请对元素 item 使用名为 item 的容器约束。像这样的:

    xquery version "1.0-ml";
    
    import module namespace search = "http://marklogic.com/appservices/search"
      at "/MarkLogic/appservices/search/search.xqy";
    
    search:search(
      "item:(Ga AND As)",
      <options xmlns="http://marklogic.com/appservices/search">
        <constraint name="item">
          <container>
            <element ns="" name="item"/>
          </container>
        </constraint>
        <debug>true</debug>
      </options>
    )
    

    要匹配AlGaAs 之类的内容,您可能需要扩展查询以搜索术语组合,并混合一些通配符。它将匹配*Ga**As 之类的模式。请注意,您必须启用通配符索引选项才能使其正常工作。

    HTH!

    【讨论】:

    • 感谢 grtjn 的回复。抱歉回复晚了。通配符搜索的问题是 Ga* 也会得到“GaN”的值(我添加了示例),这是不期望的,它应该只返回“Ga”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2018-11-23
    • 2019-07-22
    相关资源
    最近更新 更多