2016-06-10 72 views
2

如何搜索編碼的unicode字符?在marklogic中搜索unicode字符

例如這正常工作

search:search('ģ') 

但這並不:

(: $search-for received encoded with & :) 
xdmp:log($search-for), (: prints "#x0123;" :) 
search:search($search-for) 

輸出包含: <search:qtext>&amp;#x0123;</search:qtext>

什麼是檢測是否字符串包含&,並將其轉換的最佳方式是什麼?

+0

轉換爲什麼?在XML中,&符號始終是實體編碼的。 – wst

+0

如果我在其工作的模塊中鍵入search:search(「&#x0123;」)。但變量我收到的結果是taht qtext片段 – chriskelly

+1

任何XML輸出將始終編碼&符號。其他任何東西都將是無效的XML。即:'你好& world/string()'=>'Hello world'。 – wst

回答

1

我認爲一些瀏覽器或其他工具是愚弄你。當我在QConsole(MarkLogic 8.0-5.2)運行以下命令:

xdmp:document-insert('/unicode.xml', <p>hello &#x0123; world</p>) 
; 
import module namespace search = "http://marklogic.com/appservices/search" 
    at "/MarkLogic/appservices/search/search.xqy"; 

let $search-for := "&#x0123;" 
return 
    search:search($search-for) 

我得到:

<search:response snippet-format="snippet" total="1" start="1" page-length="10" xmlns:search="http://marklogic.com/appservices/search"> 
    <search:result index="1" uri="/unicode.xml" path="fn:doc(&quot;/unicode.xml&quot;)" score="36864" confidence="0.5609438" fitness="0.6934683"> 
    <search:snippet> 
     <search:match path="fn:doc(&quot;/unicode.xml&quot;)/p">hello <search:highlight>ģ</search:highlight> world</search:match> 
    </search:snippet> 
    </search:result> 
    <search:qtext>ģ</search:qtext> 
    <search:metrics> 
    <search:query-resolution-time>PT0.003526S</search:query-resolution-time> 
    <search:snippet-resolution-time>PT0.001206S</search:snippet-resolution-time> 
    <search:total-time>PT0.005372S</search:total-time> 
    </search:metrics> 
</search:response> 

例如unicode字符不會被轉義。

HTH!

+0

感謝@grtjn的迴應,但實際上,我從來沒有在查詢控制檯中運行它!我知道這會產生不同的結果。 – chriskelly

+0

通常會,但可能會給你一些東西來比較,或尋找.. – grtjn