问题在于:
我在PostgreSQL中有一个表格,其中包含纯文本和tsvectors的地址。我试图在这样的查询中找到地址记录。
SELECT * FROM address_catalog
WHERE address_catalog.search_vector @@ to_tsquery('123456:* & Klingon:* & Empire:* & Kronos:* & city:* & Matrok:* & street:* & 789:*')
但问题是,我对查询中的地址一无所知。我无法定义传入字符串中的国家/地区,城市或街道的位置。我不知道地址的单词顺序,或者它是否包含额外的单词。
我只能搜索国家/地区和城市,但如果传入的字符串包含街道,索引或其他内容,则由于所有矢量令牌的连接,搜索不会返回任何内容。同时,我根本无法删除一些字符串部分或使用析取,因为我永远不会知道字符串中的额外单词在哪里。
那么,有没有办法构造一个tsquery来为返回的字符串返回一些最佳匹配?或者可能部分匹配?当我试图强制它在tsquery中使用 OR 而不是 AND 时,它几乎将整个数据库返回给我。我需要矢量交叉...在postgresql中。
答案 0 :(得分:1)
我建议使用smlar(PDF)扩展名。它是由写文本搜索的同一个人写的。它允许您使用TF-IDF相似性度量,这允许"无关"查询字词
以下是如何编译它(我还没弄明白如何在Windows上编译它):
http://blog.databasepatterns.com/2014/07/postgresql-install-smlar-extension.html
以下是如何使用它:
http://blog.databasepatterns.com/2014/08/tf-idf-text-search-in-postgres.html