gpt4 book ai didi

sql - 在 Lucene 或 SQL 中有更好的性能

转载 作者:行者123 更新时间:2023-11-29 11:35:33 25 4
gpt4 key购买 nike

我正在使用 PostgreSQL 数据库。

有一个名为 metadatavalue 的表,结构如下:

metadatavalue_id    integer  Primary Key Auto Increment
metadta_field_id integer Foreign Key
text_Value varchar
text_lang varchar
place integer

当提交任何内容或添加具有近 25 个元数据字段的项目时已创建。

元数据值表已经包含了

One Hundred Fifty Thousand(150000) records.

我正在为一个字段实现自动完成功能,比如“作者”在表中存储为 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)。

最佳答案

我想说,如果完成适当的索引,任何数据库都可以优雅地处理至少一百万行,你没有理由进入 Lucene 或 Solr,它们会给你带来新的任务,比如将你的索引与最新状态同步数据库的。

此外,Lucene 或 Solr 非常适合自由文本搜索。这意味着,如果您在 Lucene“文档”中搜索“Bob Marley”,那么您将获得所有包含“Bob Marley”、“Marley Bob”或仅包含“Bob”且仅包含“Marley”甚至“Bob..”的文档。 .很多文字......马利”。因此,使用 Lucene 还取决于您要涵盖的用例类型。

根据您显示的查询,我觉得如果索引 metadatavalue.text_value metadatafieldregistry.metadata_schema_idmetadatafieldregistry.element 会获得良好的性能列。还可以尝试将您的查询转换为联接而不是 in 查询。

谢谢

关于sql - 在 Lucene 或 SQL 中有更好的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11726358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com