2012-05-25 78 views
1

我正在Marklogic工具上工作 我有一個大約27000個文檔的數據庫。 我想要做的是檢索由任何搜索查詢的結果給出的文檔中具有最大頻率的關鍵字。 我目前使用xquery函數來計算檢索結果中檢索的所有文檔集合中每個單詞的頻率。但是,這是非常低效的。 我在想如果我能得到marklogic已經執行索引的單詞列表,它會幫助我。 那麼有沒有辦法從marklogic的通用索引中檢索索引單詞列表?有沒有辦法從Marklogic通用索引獲取索引單詞列表

回答

1

通常你會使用這樣的事情在MarkLogic:

(
    for $v in cts:element-values(xs:Qname("myelem")) 
    let $f := cts:frequency($v) 
    order by $f descending 
    return $v 
)[1 to 10] 

這種功能是內置在search:search庫,它很方便地工作。

但是,您不能在cts:words e.a.不幸。有一個小技巧可以讓你接近。除了使用cts:frequency的,你可以使用一個xdmp:estimatects:search獲得碎片計數:

(
    for $v in cts:words() 
    let $f := xdmp:estimate(cts:search(collection(), $v)) 
    order by $f descending 
    return $v 
)[1 to 10] 

的性能要差一些,但仍遠快於通過所有文件直言運行。

HTH!

1

如果您的搜索包含多個詞彙,該怎麼辦?你將如何計算訂單?

如果你的一些術語在你的文檔中很常見,而其他的則很少見? 「這個」的數量應該比「蛋白酶」更有貢獻,還是應該貢獻相同?

如果單詞出現在標題中與文檔中的其他地方有關係嗎?

如果一個文檔相對較短,而另一個文檔相當長,會怎麼樣?你如何解釋這一點?

這些是試圖確定相關性時出現的一些基本問題。大多數搜索引擎使用術語頻率(術語在您的文檔中出現的頻率)和文檔頻率(多少文檔包含術語)的組合。他們還可以使用文檔中術語的位置來確定分數,並且還可以在確定分數時考慮文檔長度。

MarkLogic使用詞頻和文檔頻率的組合來默認確定相關性。這些因素(和其他因素)用於確定搜索條件的相關性分數,此分數是搜索返回結果的默認排序:從搜索API或低級別cts:搜索及其支持運算符進行搜索。

您可以查看cts:search的選項的詳細信息以瞭解一些不同的得分選項。參見「記分logtfidf」和其他在這裏:

http://community.marklogic.com/pubs/5.0/apidocs/SearchBuiltins.html#cts:search

我也想看看搜索開發人員指南:

http://community.marklogic.com/pubs/5.0/books/search-dev-guide.pdf

許多概念正在審議XQuery工作組作爲未來版本XQuery的增強。他們今天不是語言的一部分。 MarkLogic多年來一直處於搜索的最前沿,因此您會發現產品中有很多功能,並且在檔案中涉及這方面的很多討論。

1

「有沒有辦法從marklogic的通用索引中檢索索引詞列表?」不是。通用索引是一個哈希索引,所以它包含哈希而不是單詞。

正如其他人所指出的那樣,您可以創建可以列出其內容的基於價值的詞典。其中一些還包括頻率信息。但是,我有另一個建議:cts:distinctive-terms()將從節點序列中識別出最具特色的術語,這可能是搜索結果的當前頁面。您可以控制輸出項是否只是單詞,還是包含更復雜的術語(如元素詞或短語)。有關更多詳細信息,請參閱文檔。

http://docs.marklogic.com/5.0doc/docapp.xqy#display.xqy?fname=http://pubs/5.0doc/apidoc/SearchBuiltins.xml&category=SearchBuiltins&function=cts:distinctive-terms

0

我用CTS:獨特的字詞()。它在我的情況下主要提供通配條款,這些條款沒有多大用處。 Furthur適合在單個文檔中查找獨特的術語。當我嘗試在很多文檔上運行它時,速度很慢。

我想要實現的是一個動態的方面,它填充了搜索結果中出現的文檔的關鍵字。我已經實現了它,但它效率低下,因爲它計算了文檔中所有單詞的頻率。我希望它是一個建議或推薦功能,如果您搜索了這個特定的術語或短語,那麼您可能會對這些建議的術語或短語感興趣。所以我想要一個有效的方法來查找搜索文檔的結果集中常見的術語。

我試過cts:words(),建議。它給出與搜索查詢詞相似的單詞以及它所包含的文檔數量。它沒有考慮到的是搜索結果文件的集合。它只顯示整個數據庫中包含相似詞彙的文檔數量,而不管這些文檔是否存在於搜索結果中

+0

這應該可能是對Blakeley上述答案的評論 –

相關問題