2010-03-06 100 views
30

到目前爲止故事:Django實際工作的搜索引擎解決方案?

決定與Xapian的去作爲搜索的後端,因爲它擁有所有的搜索引擎功能,我一直在尋找,知道的Unicode,詞幹,幾乎沒有依賴關係,並要求在沒有臃腫的應用服務器安裝它的頂部。

嘗試過Django和Haystack(加上xapian-haystack,將Haystack綁定到Xapian的後端粘貼代碼),因爲它在相當多的博客上被標榜爲「working」。不工作。 django-haystack和xapian-haystack項目都沒有提供實際合作的版本組合。來自兩個項目的MASTER從Xapian中產生一個錯誤,所以它不穩定。 Haystack 1.0.1和xapian-haystack 1.0.x/1.1.0不兼容API。此外,在草堆1.0.1和Xapian的-MASTER草垛的最小安裝工作,任何複雜的查詢產生任何結果,由於在任Django的草垛或Xapian的-草垛(我的雙驗證了這一點)的錯誤,也許是因爲單元測試實際上測試非常簡單的案例,並且根本沒有邊緣案例。

試過Djapian。源代碼是充斥着拼寫錯誤(請注意,在變量名,而不是評論),文檔也充滿了含糊和過時的信息永遠不會導致工作安裝。毫不奇怪,用戶很少要求功能,但如何才能使其工作。探索Solr(安裝Java環境加上Tomcat讓我頭痛,機器受內存和CPU限制)或Lucene(稍微少點頭疼,但仍然)。

在我開始花更多的時間與可能或可能無法正常工作,標榜一個解決方案,我想知道:有沒有人得到一個實際的,現實世界的搜索解決方案在Django的工作?我是認真的。我覺得很沮喪閱讀「主要是解決大問題」,然後意識到,你將永遠不會從源代碼得到一個工作安裝,因爲,事實上,對付那些「大多是亟待解決的問題」的所有博客從來沒有過去基本安裝和複製粘貼官方教程。

因此,這裏是要求:

  • 必須能夠搜索10-100術語在一個查詢
  • 必須處理+(項必須存在)和 - (項必須不存在)和/或
  • 必須(即左右括號AND/OR)處理任意分組
  • 必須允許Django的ORM過濾前或全文搜索後(即前/結果與全套的後處理這Django知道有關過濾器)
  • 替代地,必須有一個設施散裝取結果集,並將其轉換成一個查詢集
  • 應該是在機器上的光,所以優選不堆積如山JVM和基於Java的應用程序服務器安裝

有沒有什麼可以做到這一點?我對軼事證據不感興趣,或者對一些聲稱它應該有效的博客文章的引用感興趣。我希望聽到有人在現實世界中真正具備全功能設置的情況下,在真實條件下以及真正的疑問。

編輯:

讓我再次重申,我不是這樣的傳聞證據表明,有人在什麼地方有着幾分運行安裝有不明性質的工作非常感興趣。我已經去了那裏,我閱讀了所有的博客文章,郵件列表,我聯繫了作者,但是當涉及真實場景的實際實施時,沒有任何東西能像廣告一樣工作。考慮到任何項目的總體擁有成本,我絕對不會有興趣聽到有人在一個供應商以未知數量跳傘時能夠把它拉下來的興趣。的專家用特定的領域知識對整個安裝進行修補,這些知識在任何地方都沒有記錄。

因此,如果您聲稱您的工作安裝實際滿足完整搜索的最低要求(請參閱上述要求),請提供以下內容,以便我們都能從Django的搜索解決方案中受益實際上解決了這個問題:

  • 確切的Linux發行版,發行版,草垛(或同等學歷)
  • 確切的發佈版本和發佈搜索後端的版本,搜索引擎
  • 確切的發佈版本
  • 公開(!)可用文檔如何準確設置所有組件,以符合上述最低要求。

謝謝。

+0

恐怕你有一個非常有效的點。我一直在嘗試將djapian或haystack + xapian-haystack插入到一個網站,該網站在MySQL中使用LIKE實現了一個工作搜索功能,到目前爲止,它看起來像準備一個可重現的工作設置將是一場噩夢。我已經甩掉了Djapian並且用大海撈針,但儘管開始很快,但我已經發現了一些bug(或文檔短缺,我還不確定)。 – 2010-12-12 20:53:21

回答

7

簡短的回答:

我們保釋,並與谷歌的自定義搜索去了。儘管該網站擁有超過10,000個可能的網頁瀏覽量,但我們仍將網站地圖Feed降低到4000頁左右,每年花費250美元,這大概是我的2個小時。客戶很高興,他對結果感到滿意。

我很想看到有人提出了一個很好的FOSS解決方案,但在商業環境中,TCO必須具有經濟意義。

2

我(和我的同事)已經成功地使用Haystack來實現相當好的搜索功能。

從haystack和whoosh後端開始很容易;並且當whoosh的性能不可接受時更改爲Apache-Solr後端。

我們真的得到解決它的詳細的帖子,並鏈接到它工作的項目。

現在我可以建議你看看這個搜索:http://www.webdevjobshq.com/search/?q=rails使用Haystack和Apache-Solr後端實現。或者這個:http://www.govbuddy.com/search/?q=Roy

+0

我非常想知道你是如何工作的,以及你正在使用的版本,包括操作系統版本(例如Ubuntu 9.10上的Solr是一件痛苦的事,因爲Tomcat 5.5沒有包,因此solr -tomcat5.5軟件包無法安裝,這意味着拉和編譯大量的依賴關係)。 – nikola 2010-03-07 00:54:50

+0

另外,Whoosh處理了多少個搜索詞?在實際開發中是誰?從該項目的Trac網站來看,它已經停滯不前,致命的錯誤依然存在。 – nikola 2010-03-07 01:04:23

+0

Trac網站已過時,Whoosh已轉移到bitbucket:http://bitbucket.org/mchaput/whoosh/changesets/,並且仍在積極開發中。 – 2010-04-05 18:39:41

0

我用Djapian。這很簡單,安裝和工作很好。有一個實際的教程,涵蓋了基本的用例,並顯示了整個集成過程。

是的,它有一些含糊不清,但問題跟蹤器是開放的,作者迅速修復錯誤和添加功能。

+1

我跟着教程,它不起作用。請告訴我,您使用的確切版本導致了完全正常的安裝,並且實際上適用於真實世界的場景。 – nikola 2010-03-07 00:56:12

1

您考慮過Sphinx嗎?你在數據存儲中使用什麼?它有一個非常棒的MySQL引擎。我認爲它符合你的大部分要求,除非我不確定它可以很好地綁定到Django-ORM中。

我在考慮在自己的Django應用程序中使用Sphinx來提高自動建議字段的性能,該字段在350萬條記錄的語料庫中執行前綴和中綴搜索。但我還沒有着手實現它,所以我不能說Django + Sphinx集成。我唯一的Sphinx體驗是使用MySQL引擎並直接查詢MySQL。

+0

而這正是問題所在。我過去曾經遇到過獅身人面像,但我從未見過任何人,也沒有讀過關於如何在實際場景中實際將獅身人面像整合到Django中的問題,其中包括實際兼容的特定版本號。django-sphinx的作者用他自己的話來說的關鍵詞:「安裝完成後,你需要編輯settings.py中的一些設置,這同樣是因爲我在文檔中吮吸,不會在網站上發佈。」我不會去碰這個,對不起。 – nikola 2010-03-08 02:54:15

+0

我有django-sphinx工作正常。我正在使用最新的兩種版本,以及中綴和前綴搜索工作。他們創造了大量的索引,但是否則他們就會工作。 是的,django-sphinx的文檔不是很好,但它已經足夠了。它的美妙之處在於它實際上是一個相當小的連接器,如果它不像您期望的那樣工作,您可以弄清楚發生了什麼。獅身人面像是相當強大和快速的,並在論壇上的支持是好的。而他所說的設置不會發布......我相信他們發佈在項目網站上。 – mlissner 2010-05-10 22:52:47

+0

獅身人面像是偉大的,但Django獅身人面像是一場災難。節省自己的麻煩,並嘗試其他的東西。 – yekta 2014-10-31 13:41:59

11

我已經與Xapian的支持一些Django應用程序了。其中最大的一家擁有8G索引的xapian數據庫,可存儲2.4M文檔(包括論壇帖子,維基條目,星球條目和博客條目) - 仍在不斷增長。

總的來說,我與Xapian的很高興。它表現非常好,易於使用。我不喜歡的唯一情況是xapian不能用於mod_wsgi(全局模式除外),因爲死鎖。所以你不得不使用fastcgi(或者連接到xapian-tcpsrv或者編寫你自己的服務)。

我建議你,可以直接使用Xapian的-綁定。 Xapian現在提供了很多有用的幫助器(TermGenerator,QueryParser等),這使索引和查詢變得簡單。事實上,沒有任何我可以成像的東西可以證明一個額外的圖書館。在我看來,它們都更加複雜,不允許你有效地進行索引。

你唯一需要的,是如何Xapian的工作方式表示一定的瞭解。 (什麼是術語?什麼是價值?什麼是詞彙,我應該在哪裏使用它?等等)。你可以在xapian網站上找到所有這些主題,只要你理解了這些概念,處理xapian就會變得簡單。

此外,Xapian的API是穩定的極端。我已經開始在1.0版本之前使用它很久,並且從未遇到API更改或版本衝突的問題。唯一改變的是,我曾經爲我的Django項目寫過的所有helper(查詢解析器,tokenizer等)現在都沒用,因爲類似的類已經進入了xapian核心。

因此,要總結,只是給的Xapian-綁定嘗試直接使用。

9

我可以在現實生活環境中爲Xapian後端(爲了充分披露,我是xapian-haystack後端的作者)擔保Django-Haystack。我們目前在多個站點上使用Haystack/Xapian,其中最大的註冊用戶超過20,000人,Xapian數據庫擁有20000多個文檔,包含超過143,000個獨特條款,總大小約爲141MB。

至於無法獲得Haystack和Xapian後端運行的任何組合,我會承認我沒有像應用我的標籤那樣勤奮,因此對版本有些混淆。但是,您應該可以毫無問題地使用兩個代碼庫的當前主控。如果不是這種情況,我很樂意協助解決問題。儘管如此,你需要對這個問題稍微具體一些。簡單地說「它沒有用」是不夠的信息。

丹尼爾和我都盡最大努力及時迴應在Github上打開的任何問題。另外,我們通常都可以在#haystack IRC頻道和django-haystack Google Group上使用。使用

版本:

  • 草堆1.0BETA與Xapian的-草堆1.1。0BETA
  • 草堆1.0.1FINAL與Xapian的-草堆1.1.3BETA

大多數我們已經部署了草堆的網站已經運行Ubuntu 8.04與Xapian的1.0.5

7

細節你的要求。

  • 確切Linux發行,發行版本 - Ubuntu的9.04 & 9.10
  • 草堆(或等同物)的精確發行版本 - 草堆1.0以及主
  • 釋放搜索後端的版本 - Solr的&嗖後端包括在草堆
  • 確切的發佈版本的搜索引擎 - (!)的Solr 1.3,Solr的1.4 &嗖0.3.15
  • 公開獲得的文件如何設置的所有組件exactl y以安裝設置的方式滿足上述最低要求。

除此之外,它是從教程中的標準配置位,加上任何附加的覆蓋(我不能鏈接到,由於堆棧溢出)如所須。

作爲Haystack的維護者,我積極運行上述所有的設置。最小的Haystack安裝(Haystack 1.0 + Whoosh)是〜600個文檔。一個稍大的(Haystack master + Solr 1.4)是〜4000個文檔。我知道的最大部署(Haystack master + Solr 1.4)是大約300萬個文檔。

我通常會盡量避免堆棧溢出,所以不要驚訝,如果你沒有看到任何進一步從我。郵件列表是最好的支持地方,但鑑於迄今爲止的回覆,我相信你寧願在這裏把我甩到一邊。

+0

如果您將「詢問確切的問題以驗證開發人員提出的索賠」標籤爲「垃圾」,那麼很好。我試圖說的是,如果作爲Haystack的開發人員只安裝了600到4000個索引文檔,那麼您不應該聲稱您的軟件適合現實世界 - 因爲您沒有「沒有驗證它。另外,我已經嘗試了以上版本 - Ubuntu 9.x上的Solr是一個不行,因爲沒有Tomcat 5軟件包,Haystack/xapian-haystack的主人不穩定,等等。 – nikola 2010-05-25 12:45:13