我想做一个文本搜索.
我在用着PostgreSQL http://www.postgresql.org/因为神奇的Postgis http://postgis.refractions.net/.
我正在考虑使用FTS http://www.postgresql.org/docs/9.1/interactive/textsearch.html,但是我看到它无法搜索部分词 https://stackoverflow.com/questions/2908712/when-will-postgress-full-text-search-supports-phrase-match-and-proximity-match,所以我发现这个问题 https://stackoverflow.com/questions/2513501/postgresql-full-text-search-how-to-search-partial-words,并看到如何trigrams http://www.postgresql.org/docs/9.1/static/pgtrgm.html works.
主要问题是我正在开发的搜索引擎是针对西班牙语的。
FTS 非常适合词干提取和字典 http://www.postgresql.org/docs/9.1/interactive/textsearch-dictionaries.html(同义词、拼写错误)、UTF 等。
三元组对于部分单词非常有用,但它们只适用于 ASCII,并且(显然)它们不使用字典之类的东西。
我在想是否有什么办法可以利用两者最好的东西。
是否可以使全文搜索和 Trigrams 在 POSTGRESQL 中协同工作?
您可以在 Postgres 中执行此操作,而不需要 Lucene。
您可以引用以下短语tsquery
or 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()
and [plain]to_tsquery()
将删除您的报价。您可以编写自己的不执行此操作的版本(这并不难),或者在它们之后进行一些后处理以构建您的术语 n 元语法。
上面额外的单引号只是转义符。select $$ i heart 'new york city' $$::tsvector;
是等价的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)