2017-02-09 75 views
0

我正在嘗試爲我正在構建的應用實施搜索建議。我試着按照指南found hereMarkLogic搜索使用Java API建議

我修改了一些東西來處理我的數據庫。我選擇現在這個樣子:

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>; 

命名爲「內容」是我想要搜索的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

請添加一個示例XML文檔,您希望從 –

+0

提供建議添加了示例文檔。現在我看看它,是在搜索「內容」元素而不是「價值」元素的問題? 編輯:Nvm,將'content'更改爲'value',但仍然沒有任何內容 –

+1

儘管您的Sample文檔沒有顯示任何命名空間,但確實聽起來您有名稱空間問題。請記住確保在選項和範圍索引中都有空白的名稱空間。你可以通過在QConsole中運行以下Javascript來直接測試範圍索引:'cts.elementValueMatch(xs.QName(「value」),「*」)' –

回答

1

它的工作原理! Sam Mefford關於在控制檯中運行的評論讓我意識到它實際上會返回結果,而不是我的搜索字符串。我在搜索文本週圍扔了一些通配符,現在它可以工作。在調整我的索引和選項以搜索正確的XML元素並將名稱空間留空之後。

+0

既然您找到了答案,請將其標記爲「已接受」,以便其他人知道問題已得到解決。 –

+1

明天之前它不會讓我接受它,但我會盡快完成。 –