2011-11-04 58 views
0

可以說我有一個帶有postgres數據庫的Web應用程序。我想添加一個谷歌搜索字符串(abc + site:xyz + size> 800 -pqrs)。所以這個字符串會生成一個用於返回數據庫結果的sql。要搜索的表基本上是具有關係數據的關鍵值存儲。可能有不同的方法來做到這一點。谷歌喜歡搜索字符串解析爲sql

通過我自己解析/標記用戶查詢並生成sql或使用postgresql中的lucene或tsearch2。不知道哪一個是更好的方法呢。但我傾向於lucene。 如果我使用lucene,我可以在數據庫中創建索引還是將它駐留在文件系統上?沒有找到最新版本的lucene的好教程。

我可以在當前的Web應用程序中使用solr,還是必須將其作爲單獨的服務器實例運行並針對它進行查詢? 一些有用的鏈接將是很大的幫助。

回答

2

解析/標記化而由自己的用戶查詢和生成SQL

在大多數情況下,這是醜陋的,容易出錯的,但在某些情況下沒有那麼糟糕。如果數據庫相對較小並且模式是靜態的,並且沒有許多字段(例如,列)進行搜索 - 這可以是正確的。

或者使用postgresql中的lucene或tsearch2。不知道哪一個是更好的方法

一般來說,專用的FTS更好。

你做了「家庭作業」並在網上花了一些時間嗎?請搜索「postgresql lucene」或「postgreSQL FTS」並閱讀前5個結果。先從比爾Karwin這個優秀的演講:http://www.slideshare.net/billkarwin/full-text-search-in-postgresql

哪種方法更好,這取決於很多因素,其中包括:

  • 您在J2EE或不?
  • 您想要最低限度的維護或最高的性能嗎?
  • 什麼是數據庫使用模式,從讀寫比例開始?

如果我使用Lucene的,我可以在數據庫中創建索引或將它駐留在文件系統上?

大多數FTS解決方案,包括Lucene的/ Solr的,用自己的靜態指標文件數據庫之外。這對於非關係數據來說更好。

我可以在當前的web應用程序的Solr使用或我一定要運行它作爲反對一個單獨的服務器實例和發出查詢?

這是在這裏找到答案:http://lucene.apache.org/solr/#intro

+0

是解析容易出錯,處理所有角落的情況下可以說是相當的任務。我正在使用GWT。我正在尋找最佳表現。寫入不會經常發生,主要是讀取操作。 – Harpreet