我正在使用PostgreSQL
数据库。
有一个名为 metadatavalue 的表,其结构如下:
metadatavalue_id integer Primary Key Auto Increment
metadta_field_id integer Foreign Key
text_Value varchar
text_lang varchar
place integer
当提交或添加任何内容时,就会创建一个包含近 25 个元数据字段的项目。
元数据值表已经包含
十五万 (150000) 条记录。
我正在为一个字段实现自动完成功能,比如说“作者”,它作为 metadata_field_id 存储在表中。
当我在 PgSQL 提示符下查询表时,返回结果大约需要 1 或 2 秒。
询问:
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 的搜索。
其中,首先从后端创建索引,然后在每个新项目创建时运行一个线程来索引新项目。
我想知道Apache Lucene是更好的选择还是可以优化 SQL。
编辑:还有另一个包含元数据字段的表,它在元数据值表中用作值的外键(metadatafieldregistry.metadata_field_id)。