1

我正在尝试构建一个类似于使用 App Builder 开发的预输入/建议功能。

我的 XQuery 是:

xquery version "1.0-ml";
import module namespace search = "http://marklogic.com/appservices/search"
    at "/MarkLogic/appservices/search/search.xqy";
let $options := 
<options xmlns="http://marklogic.com/appservices/search">
<additional-query>{cts:and-query((cts:collection-query("NY"),cts:element-value-query(xs:QName("Office"),"47","exact"),cts:element-value-query(xs:QName("Person"),"15","exact")))}
 </additional-query>
 <constraint name="Search_Element">
 <range collation="http://marklogic.com/collation/" 
          type="xs:string" >
      <element name="Account"/>
   </range>
   </constraint>
 <suggestion-source ref="Search_Element">
   <range collation="http://marklogic.com/collation/" 
          type="xs:string" facet="true" >
      <element name="NUM_ACCT"/>
   </range>
 </suggestion-source>
 </options>
return    
search:suggest("Search_Element:103", $options)

这将返回所需的建议。 但是,现在当我希望将它集成到 UI 中时,我无法理解它是如何实现的。

  1. REST API 对于上述查询似乎不够丰富,因为它的键/值、元素值搜索等。例如,我想实现 typehead,对于 NY 集合中的 account 元素,对于上面的特定 office-person 元素值查询

  2. App Builder 使用extsuggest扩展,但我无法获得更多信息。

我有一个文本框,它在 typeahead 上,将通过 REST 或 JSON/XML 方式查询 marklogic 服务器,无论哪种方式都可以实现并显示结果。我目前正在尝试使用此处给出的 AngularJS 预输入功能。请指教 !!!

4

3 回答 3

2

对于关于 REST API 的第一点,您将上面的 XQuery 代码放在 REST 扩展中,如此所述。如果你称它为“建议”,你最终会在 /v1/resources/suggest 访问它。

我不清楚你的整体架构,但你提到了 Java 的 AngularJS 和 XCC,所以我猜你有类似 Tomcat 服务 UI 和实现业务逻辑的东西,Java 使用 XCC 与 MarkLogic 对话以获取数据。(顺便说一句:由于您使用的是 REST API,因此您可能希望使用位于 REST API 之上的 MarkLogic Java API。)

从 AngularJS 方面来看,typeahead 需要与一个服务一起工作,该服务将迄今为止输入的内容发送回 Java 服务器,该服务器会将请求转发到 MarkLogic 端点​​。我发现了另一个 StackOverflow 问题,它显示了如何设置指令以将请求发送到服务器。

于 2013-11-06T13:11:07.643 回答
2

从外观上看,该extsuggest扩展只是一个方便的 search:suggest 包装器,主要是为了轻松获取 App Builder 应用程序的搜索选项,并将任何结果作为 JSON 返回。

否则我对你的问题有点困惑。你说上面的代码给出了正确的建议,但代码下面的第二段似乎表明它没有?

或者您的问题是您有正确的建议,但不知道如何在 UI 中将它们可视化?

于 2013-11-06T08:43:55.917 回答
1

V7 中的 REST API 内置了建议。您可以直接访问它。

http://docs.marklogic.com/REST/GET/v1/suggest

我在 MarkLogic[1] 的 MLJS JavaScript 包装器中尚未涵盖的一件事是文本搜索查询栏小部件的自动建议。我已经为语义(SPARQL)查询栏小部件构建了这个。如果您使用 JavaScript 编写代码,MLJS 会为您完成所有艰苦的工作。使用 mljs 核心 API 的 do() 函数轻松插入您自己的新的 rest 函数。还有一个搜索小部件 API。

[1] https://github.com/adamfowleruk/mljs/blob/master/README.md

于 2013-11-21T12:08:15.447 回答