建议像谷歌一样使用postgresql三角图和全文搜索

建议像谷歌一样使用postgresql三角图和全文搜索,postgresql,full-text-search,trigraphs,Postgresql,Full Text Search,Trigraphs,我想做一个像这样的文本搜索 我用它是因为它有魔力 我正在考虑使用,但我发现它无法搜索,所以我找到了,并看到了它是如何工作的 主要的问题是我正在开发的搜索引擎是西班牙语的。 FTS在词干分析和(同义词、拼写错误)、UTF等方面做得很好。 三角形对部分单词非常有效,但它们只适用于ASCII,而且(显然)它们不使用字典之类的东西 我在想,是否有什么方法可以把两者中最好的东西都利用起来 是否可以在PGSQL中使全文搜索和三角形一起工作?我建议您看看。它可以在Java中本地集成,也可以在.NET中轻松集成

我想做一个像这样的文本搜索

我用它是因为它有魔力

我正在考虑使用,但我发现它无法搜索,所以我找到了,并看到了它是如何工作的

主要的问题是我正在开发的搜索引擎是西班牙语的。 FTS在词干分析和(同义词、拼写错误)、UTF等方面做得很好。 三角形对部分单词非常有效,但它们只适用于ASCII,而且(显然)它们不使用字典之类的东西

我在想,是否有什么方法可以把两者中最好的东西都利用起来


是否可以在PGSQL中使全文搜索和三角形一起工作?

我建议您看看。它可以在Java中本地集成,也可以在.NET中轻松集成,或者在php中使用SOLR和web服务

它具有强大的自由文本搜索功能、开箱即用的术语排名功能、使用不同语言的支持(西班牙语链接)


最后但并非最不重要的一点是,它的速度也非常快(对于大容量,比如说4Gb索引~ 5000000行,在一个DB中,它比Postgres数据库快得多)。

您可以在Postgres中这样做,而不需要Lucene

您可以引用
tsquery
tsvector
中的短语,如下所示。您可以在
tsquery
术语后添加
:*
,以进行前缀搜索:

select
'''new york city'''::tsvector   @@ '''new yo'':*'::tsquery, --true
'''new york times'''::tsvector  @@ '''new yo'':*'::tsquery, --true
'''new york'''::tsvector        @@ '''new yo'':*'::tsquery, --true
'''new'''::tsvector             @@ '''new yo'':*'::tsquery, --false
'new'::tsvector                 @@ '''new yo'':*'::tsquery, --false
'new york'::tsvector            @@ '''new yo'':*'::tsquery  --false
主要问题是
to_tsvector()
[plain]to_tsquery()
将删除您的报价。您可以编写自己的版本,但不这样做(这并不难),或者在它们之后进行一些后处理,以构建术语n-grams


上面额外的单引号只是转义<代码>选择$$i heart'纽约市'$$::tsvector是等效的

我将采用类似的解决方案,使用elasticsearch,但我不能接受,因为它不能回答问题(以防有人来到这里寻找答案)。谢谢海报特别要求postgreswow提供解决方案!您可以添加一个关于这个三引号的文档参考吗?三引号实际上是普通的SQL,我只是用另一个引号来转义一个引号。文件在这里提到: