我正在使用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