您可以在 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;是等价的。