2013-11-02 19 views
0

我發現了一種簡單的方法來搜索Solr中的關係數據,但我不確定是否應該進一步優化它。我是否應該擔心優化大量Solr字段以及大量重複項?

讓我舉一個例子:說,我們有一個系統,用戶在個人收藏中組織書籍。一本書有一個流派,例如「戲劇」,「驚悚片」,「恐怖片」等。用戶收藏可以並且在大多數情況下包含來自不同流派的書籍。

如果我想創建一個搜索,用戶可以按照流派搜索集合,我想返回包含與流派查詢最相關的書籍的結果。我所做的只是一個簡單的竅門 - 我爲集合添加了一個名爲「流派」的搜索字段,它是該集合中所有書籍類型的連接字符串。該字符串字段在索引時創建。它很有意義,因爲如果一個集合包含30個「驚悚片」和20個「喜劇」書籍,在搜索「驚悚片」時,它會顯示爲比搜索「喜劇」更相關的結果。

然而,正如你所猜測的那樣,「流派」字段最終有很多重複的條款。由於它只能在幕後使用,並且不會顯示在任何地方,所以這不是一個數據完整性,而是一個優化問題恕我直言。

我對Solr特別陌生。我知道它是如何工作的,並且我假設在建立倒排索引時,每一項都與簡單的頻率計數相關聯。從技術上講,如果「流派」字段由100個術語或10000個術語組成,其中9500個是「顫慄」,那麼索引和查詢速度應該沒有多大關係,對吧?

如果我錯了,那麼是否存在一種語法,即使在輸入文本中也可以提供提升?再說了,如果不是10000點而言,「流派」字段看起來像:

「顫慄^ 8500喜劇^ 125戲劇^ 12」

回答

0

,您應該使用的Solr的有效載荷功能,允許在文本提升的話。 例如檢查http://sujitpal.blogspot.ru/2011/01/payloads-with-solr.html

關於您的方法:如果stored, termPositions, termOffsets字段屬性設置爲false,所有將會很好。

+0

stored = false應該保持索引大小很小,對吧?因爲無論如何我們不需要顯示該字段,所以我們不需要保存它,這是這裏的邏輯嗎? – preslavrachev

+0

是的,我們只需要保留一個術語向量。 – Nikolay

+0

是的,有效載荷的方法似乎很有趣,但它不會有那麼多的優勢,對吧?也就是說,一旦我擺脫了存儲=真。然後,術語矢量將只保留術語計數器作爲參考 – preslavrachev