建议像google与postgresql三元组和全文搜索

jpe*_*lli 8 postgresql full-text-search trigraphs

我想像google建议一样进行文本搜索.

因为神奇的Postgis,我正在使用PostgreSQL.

我正在考虑使用FTS,但我发现它无法搜索部分单词,所以我发现了这个问题,并看到了三元组的工作方式.

主要问题是我正在研究的搜索引擎是用于西班牙语.FTS在词干和词典(同义词,拼写错误),UTF等方面表现出色.Trigrams适用于部分单词,但它们只适用于ASCII,并且(显然)它们不使用字典之类的东西.

我在想是否有任何方式可以使用两者中最好的东西.

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

Nei*_*gan 6

您可以在 Postgres 中执行此操作,并且不需要 Lucene。

您可以引用tsquerytsvector喜欢下面的短语。您可以:*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
Run Code Online (Sandbox Code Playgroud)

主要问题是,to_tsvector()并且[plain]to_tsquery()会删除您的报价。您可以编写自己的版本,但不这样做(这并不难),或者在它们之后进行一些后处理以构建您的术语 n-gram。

上面额外的单引号只是转义。select $$ i heart 'new york city' $$::tsvector;是等价的。