我正在使用PostgreSQL
數據庫。在Lucene或SQL中性能更好
經與結構的命名metadatavalue表如下:
metadatavalue_id integer Primary Key Auto Increment
metadta_field_id integer Foreign Key
text_Value varchar
text_lang varchar
place integer
如果一切都被提交或幾乎25元數據字段創建 添加的項目。
的metadatavalue表已經包含了周圍
十五萬(150000)的記錄。
我正在執行一個字段的自動完成功能,讓說「作者」 這是作爲metadata_field_id存儲在表中。
當我在PgSQL提示符上查詢表時,它需要幾乎1或2秒才能返回結果。
QUERY:
SELECT metadatavalue.text_value AS author, count(metadatavalue.text_value) AS count
FROM metadatavalue
WHERE (metadatavalue.metadata_field_id IN (SELECT metadatafieldregistry.metadata_field_id
FROM metadatafieldregistry
WHERE metadatavalue.text_value LIKE 'Pra%' AND metadatafieldregistry.metadata_schema_id = 1 AND metadatafieldregistry.element::text = 'contributor'::text))
GROUP BY metadatavalue.text_value;
作爲其自動完成查詢,當用戶輸入值可能運行的4-5倍。
所以,我想實施基於lucene的搜索。
其中,At首先從後端創建索引,然後創建每個新項目的索引 創建運行一個線索來索引新項目。
我想知道是否Apache Lucene是更好的選擇還是 SQL可以優化。
編輯: 還有另一個表,其中包含元數據字段,它用作值的元數據表中的外鍵(metadatafieldregistry.metadata_field_id)。
在切換到Lucene之前,爲什麼不正確索引表?似乎是這樣一個激進的措施。 – usr 2012-07-30 18:48:18