2017-07-18 46 views
2

似乎存在與unfilteredcase-sensitive搜索相關的問題。不區分大小寫,未過濾搜索在MarkLogic中返回錯誤結果

我正在運行element-value-querycase-sensitive選項。

這個unfiltered cts搜索返回錯誤的結果。

以下代碼片段顯示錯誤的行爲。

案例1:

xdmp:document-insert('/a.xml', <a><name>Dixit</name></a>); 

cts:search(
    doc('/a.xml'), 
    cts:element-value-query(xs:QName('name'), 'dixit','case-sensitive'), 
    'unfiltered' 
); 

輸出:回到我的插入XML

預計:它不應該返回

在這裏,我認爲在指標的關鍵Dixit等於'dixit',因此將XML返回給我。

所以我嘗試了下面的一個,但沒有收穫。

案例2:

​​

輸出:返回插入XML

預計:它不應返回

難道是MarkLogic錯誤或這是預期的行爲。 我很想知道原因。

注:fast case sensitive searches & fast diacritic sensitive searches兩個指數都設置爲true

+0

我相信這個討論已經出現在這裏:http://developer.marklogic.com/pipermail/general/2017-March/020054.html – Tamas

+0

@Tamas是的情況類似。瑪麗已經很好地解釋了它,但是在答案中已經說過:短語(以空格分隔的語言)沒有這個相同的問題,但在我的情況下,對於短語,我也得到了錯誤的結果。請解釋。 –

回答

3

這與上面提到的有些不同。

索引分辨率取決於通用索引中的鍵匹配。事實證明,「Dixit」的不區分大小寫的鍵與「dixit」的區分大小寫的鍵是相同的,因爲計算大小寫不敏感的鍵的方式是計算該單詞的小寫形式的鍵。因此,在我們比較鍵的位置,有一個鍵匹配區分大小寫的「dixit」,以便索引返回一個匹配。索引分辨率可以準確地要求查詢中的大寫單詞僅匹配文檔中的大寫單詞,但不要使查詢中的小寫單詞僅匹配文檔中的小寫單詞。您需要過濾以獲得準確的結果。