PostgreSQL或ElasticSearch/Solr是这类查询的合适工具吗?
以下是当前PostgreSQL查询的示例:PostgreSQL或ElasticSearch/Solr是这类查询的合适工具吗?,postgresql,solr,
elasticsearch,full-text-search,Postgresql,Solr,
elasticsearch,Full Text Search,以下是当前PostgreSQL查询的示例: 选择一个.*,a.al_位置“(someLon,someLat)”作为d 来自al_应用程序。al_活动作为 WHERE to_tsvector('simple',a.al_关键字)@@to_tsquery('simple','someKeyword')) 订单按d偏移1000限制50; 基本上,它与定义如下的表格相对应: CREATE TABLE al_app.al_activity\u( al_id系列, al_类型int2不为空, al_时间戳
选择一个.*,a.al_位置“(someLon,someLat)”作为d
来自al_应用程序。al_活动作为
WHERE to_tsvector('simple',a.al_关键字)@@to_tsquery('simple','someKeyword'))
订单按d偏移1000限制50;
基本上,它与定义如下的表格相对应:
CREATE TABLE al_app.al_activity\u(
al_id系列,
al_类型int2不为空,
al_时间戳时间戳不为空,
al_位置点不为空,
al_int4不为空,
al_关键字字符(1024)不为空,
约束al_id_pk主键(al_id)
);
查询可以按
- 阿卢型
- al_关键字
- 时间戳
- 阿卢的受欢迎程度
- 距离(用户位置和al_位置之间的距离,如上查询示例中计算)李>
问题是:我们应该在PostgreSQL中优化这个查询,还是简单地切换到ElasticSearch/Solr之类的工具来完成这项工作?我们不会有任何问题,除非我们不确定它是否能解决我们的问题?就您正在处理单个关系/表而言,我坚信Solr或Elasticsearch是最好的解决方案,因为您不需要额外的工作就可以获得一些很好的功能,例如和更多功能。SQL不能以同样的效率和简单性来处理这些特性
也就是说,如果您的部分需求是在多个关系上执行连接,那么您应该使用关系数据库执行这些操作,而Solr没有任何帮助。Solr和Elasticsearch都能够轻松解决此问题,并且都将以更分散的方式解决此问题(就个人而言,我非常喜欢Elasticsearch,因为它是为这个目的预先设计的,并且它允许JSON,我发现它更干净)。PostgreSQL的好处在于,它能够提供与您使用的功能完全相同的额外功能,允许您在数据库中执行此操作,直到无法执行为止。我们的排序要求如何?Solr提供索引字段的排序,另请参见中的排序