【问题标题】:MarkLogic Text Search: Return Results Based on Matches Inside AttributesMarkLogic 文本搜索:根据属性内的匹配返回结果
【发布时间】:2017-08-02 22:46:25
【问题描述】:

我正在使用 Marklogic 的 search:search() 函数来处理我的应用程序中的搜索,并且我有一个用例,用户需要能够执行文本搜索,从我的文档的属性中返回匹配项。

例如,使用这个文档:

<document attr="foo attribute value">Some child content</document>

我希望用户能够对“foo”执行文本搜索(不使用约束),并根据属性 @attr 中的匹配返回我的文档。有没有办法配置查询选项以允许这样做?

键入 attr:"foo" 不是一个可行的解决方案,因此使用属性范围约束将无济于事,并且用户仍然需要能够搜索不在属性节点中的其他子内容。我在想也许有一种方法可以通过选项将 cts:query OR'd 添加到搜索中,从而允许搜索此属性?

对任何和所有其他解决方案开放。

谢谢!

编辑:

一些附加信息,以帮助澄清:

我需要能够在属性中找到匹配项,在内容的其他地方。使用上面的示例,搜索“foo”、“child content”或“foo child content”都应该返回我的文档作为结果。这意味着任何与搜索进行“与”运算的查询选项(例如 &lt;additional-query&gt;,旨在帮助限制您的搜索而不是扩展它)将不起作用。我正在寻找的是(可能)一个额外的查询选项,它将与原始搜索进行 OR'd,以便允许按子节点内容、属性内容或两者的混合进行搜索。

换句话说,就搜索而言,我希望 MarkLogic 将任何属性节点内容与元素文本节点完全相同。

谢谢!!

【问题讨论】:

    标签: search xquery marklogic


    【解决方案1】:

    您可以使用搜索 API 的附加查询选项中的序列化元素属性字 cts 查询来完成此搜索。元素属性词查询将使用通用索引来匹配属性中的各个标记。

    在 MarkLogic 9 中,您可以使用以下内容来执行搜索:

    import module namespace search = "http://marklogic.com/appservices/search"
     at "/MarkLogic/appservices/search/search.xqy";
    
    search:search("",
      <options xmlns="http://marklogic.com/appservices/search">
        <additional-query>
          <cts:element-attribute-word-query xmlns:cts="http://marklogic.com/cts">
            <cts:element>document</cts:element>
            <cts:attribute>attr</cts:attribute>
            <cts:text>foo</cts:text>
          </cts:element-attribute-word-query>
        </additional-query>
      </options>
      )
    

    【讨论】:

    • 看起来很有希望 - 但我需要用户能够输入自然文本搜索输入 - 所以在这种情况下,“foo”可能是用户输入的任何内容,并且很可能很容易改变.此外,用户也可能正在搜索/输入任何数量的其他内容,因此我不能通过将他们的输入插入到结构中来即时构建搜索选项。不过,这似乎是在正确的道路上 - 您是否知道有任何方法可以让这与传递到搜索功能的任何搜索词相关?
    【解决方案2】:

    MarkLogic 可以解析查询文本并将值映射到属性词或值查询。

    首先,你可以使用 cts:parse():

    其次,您可以使用 search:search() 并在 XML 有效负载中定义约束:

    【讨论】:

      【解决方案3】:

      我会考虑使用&lt;term&gt;&lt;default&gt; 选项。详情见http://docs.marklogic.com/guide/search-dev/appendixa#id_31590

      或者,考虑进行查询扩展。其背后的想法是最终用户发送搜索字符串。您使用 cts:parse 的 search:parse 解析它(如 Erik 所建议的那样),而不是按原样将该查询提交给 MarkLogic,而是处理 cts:query 树,以查找您想要调整或扩展的术语。通常用于自动混合同义词、相关术语或翻译,但可用于复制单个术语,并自动为这些术语添加属性查询。

      HTH!

      【讨论】:

        猜你喜欢
        • 2019-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 2021-11-20
        • 2022-07-02
        • 1970-01-01
        相关资源
        最近更新 更多