1

比如说,我有 5 个文档属于不同的集合,例如:

Biography, Fiction, Humour, Adventure 

例如,文档 1 在Adventure Collection 中:

<Book>
<title>Harry Potter and the Deathly Hallows</title>
<Author>J.K.Rowling</Author>
<year>2007</year>
</Book>

文件 2,在传记收藏中:

<Book>
<title>Steve Jobs</title>
<Author>Walter Issacson</Author>
<year>2011</year>
</Book>

现在我想在year元素上应用建议。我想将此应用于集合,例如,建议在传记集合上year使用应用程序加载器定义元素范围索引并摄取示例文档,并为文档设置中的文档配置集合。

以下是我的 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">
 <constraint name="Group">
    <collection prefix="Biography/"/>
 </constraint>

 <suggestion-source ref="Group">
   <range collation="http://marklogic.com/collation/" 
          type="xs:string" >
      <element name="year"/>
   </range>
 </suggestion-source>
 </options>
return    
search:suggest("Group:20", $options)  

在运行此查询时,我得到了2011 年2007 年的建议,这不是我所期望的。预期的建议是2011 年(因为Biography应该只搜索集合)。我在 search:suggest 上引用了这个文档,但我无法找出究竟是什么错误。我在哪里做错了?

4

2 回答 2

3

雪莉:

来自建议源的值将替换来自引用约束的值。换句话说,这些选项表示由组约束限定的输入应该来自年份范围索引,这就是您所看到的。更多详情,请参阅:

http://docs.marklogic.com/guide/search-dev/search-api#id_40748

要过滤一组建议,您可以使用两个字符串查询调用 search:suggest()。第一个为建议提供输入。第二个提供过滤约束。在上述情况下,过滤约束将是传记集合。更多详情,请参阅:

http://docs.marklogic.com/guide/search-dev/search-api#id_91911

希望有帮助

于 2013-10-18T16:07:38.203 回答
0

但是,我可以使用additional-query以下选项来实现所需的输出:

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:collection-query("Biography")}
        </additional-query>
        <constraint name="Search_Element">
          <range collation="http://marklogic.com/collation/" 
           type="xs:string" >
            <element name="year"/>
          </range>
        </constraint> 
        <suggestion-source ref="Search_Element">
          <range collation="http://marklogic.com/collation/" 
          type="xs:string" >
          <element name="year"/>
          </range>
        </suggestion-source>
    </options>
return    
search:suggest("Search_Element:20", $options)

不过,我想知道如何在不使用附加查询参数的情况下完成它,因为使用上面的集合约束会更加优化。

于 2013-10-21T07:25:41.493 回答