【问题标题】:Full text search in PostgreSQL JSON (schema-less, NoSQL-like) [closed]PostgreSQL JSON 中的全文搜索(无模式,类似 NoSQL)[关闭]
【发布时间】:2015-05-17 15:30:25
【问题描述】:

我试图在 PostgreSQL 和 MongoDB 之间做出一个我将要做的项目的决定,我需要一个无模式存储和一个全文搜索引擎。第一个包含在两个选项中,但我不太确定第二个。

PostgreSQL 是否能够在 JSON 数据中进行全文搜索,更具体地说,只能在该 JSON 数据中的某些字段中进行搜索?

另外,对于全文搜索,PostgreSQL 内置的搜索引擎和 MongoDB 中的哪个更精确?或者我会更好地使用与Sphinx 或ElasticSearch完全不同的东西?如果是第二个,它支持哪些数据库?

【问题讨论】:

  • 我觉得这太宽泛了。此外,“精确”可能不是一个好的文本搜索的质量... ElasticSearch 是它自己的数据库,可以这么说,所以它不必“支持”其他数据库。
  • @mnemosyn 好的,我将编辑 ElasticSearch 部分,但我不确定其他问题是否过于宽泛。这些都是非常简单的问题。 1) PostgreSQL 是否支持 JSON 文档中的全文搜索。 2) 使用相同的数据集,哪一个会得到更好的结果(在假设的搜索中)。
  • “更好”充其量只是主观的。通常两个(或更多选项)中的任何一个都不是真正“更好” - 每个选项都有优点和缺点,您必须对它们全部进行评估,以确定哪些是您的具体情况最重要的考虑因素,
  • @barryhunter 我完全确定我不是在这里要求火箭科学。如果我有“这是一辆红色的汽车”和“多么高的建筑!”在数据库中,我搜索“汽车”,我希望第一个短语会出现。我敢肯定你可以用另一种迂腐的方式来解决这个问题,但请注意,我实际上在这里要求的是“高质量结果”的最易于理解的含义,而不是你能想到的任何极端情况。
  • 确实,您不是在寻求科学,而是在寻求意见。当没有人有足够的信息来提供一个好的信息时。

标签: mongodb postgresql full-text-search sphinx elasticsearch


【解决方案1】:

PostgreSQL 的全文搜索功能适用于tsvector 类型。基本上:

PostgreSQL 中的全文搜索是基于匹配运算符@@, 如果 tsvector(文档)与 tsquery(查询)匹配,则返回 true

因此,给定一个 JSON 字符串,要从中索引某些字段,您希望将这些字段导入到 tsvector 类型的列中,并使用外键将它们链接回内容。按照内置tsvector_update_trigger()的模型,通过触发器透明地发生可能会很方便。

从文本搜索引擎本身的角度来看,文本的来源(JSON 字段或其他)是无关紧要的。该文件是tsvector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多