使用Java API进行MarkLogic搜索建议

时间:2017-02-09 17:45:25

标签: java marklogic marklogic-8

我正在尝试为我正在构建的应用实施搜索建议。我尝试按照指南found here

我修改了一些东西来处理我的数据库。我现在的选择如下:

String options =
        <options xmlns="http://marklogic.com/appservices/search">
            <default-suggestion-source>
                <range type="xs:string" facet="true">" +
                    <element ns="http://marklogic.com/xdmp/dls" name="content"/>
                </range>
            </default-suggestion-source>
        </options>;

名称“content”是我想要搜索的XML元素的名称,以及我不确定的命名空间,所以我只是复制了数据库中已存在的默认范围索引中的命名空间。

我的索引如下: range element index

我的Java代码如下:

StringHandle handle = new StringHandle(options);
QueryManager queryManager = client.newQueryManager();
QueryOptionsManager optMgr = client.newServerConfigManager().newQueryOptionsManager();
optMgr.writeOptions("opt-suggest", handle);

SuggestDefinition suggestionDef = queryManager.newSuggestDefinition();
suggestionDef.setLimit(10);
suggestionDef.setStringCriteria(text);
suggestionDef.setOptionsName("opt-suggest");
String[] suggestions = queryManager.suggest(suggestionDef);

将选项名称设置为我添加的建议def的行,因为它不在教程中。 搜索每次都返回一个空集。是因为我的命名空间吗?或者我错过了什么? FWIW我尝试使用显示的命名空间运行它,并使用空白命名空间。

修改:示例文档:

<Article doctype="article>
    <title>Some Name here</title>
    <content>
        <content type="paragraph">
            <value>Some text</value>
        </content>
        <content type="paragraph">
            <value>More text</value>
        </content>
    </content>
</Article

1 个答案:

答案 0 :(得分:1)

有效! Sam Mefford关于在控制台中运行的评论让我意识到它实际上会返回结果,而不是我的搜索字符串。我在搜索文本周围扔了一些通配符,它​​现在可以工作了;调整我的索引和选项以搜索正确的XML元素,并将命名空间留空。