您可以在 Postgres 中执行此操作,并且不需要 Lucene。
tsquery
您可以在下面引用或tsvector
喜欢下面的短语。您可以在词:*
后添加 atsquery
来进行前缀搜索:
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-gram。
上面多余的单引号只是转义。select $$ i heart 'new york city' $$::tsvector;
是等价的。