Postgresql 将查询的部分与三元索引匹配
我有一个Postgresql 将查询的部分与三元索引匹配,postgresql,search,trigram,textmatching,Postgresql,Search,Trigram,Textmatching,我有一个事件表,其中每个事件都有标题和描述。搜索应同时搜索两列: 标题:迪克(恩斯)和简 描述:每周会面讨论经典书籍 鉴于上述情况,我想查询图书俱乐部 我的索引: CREATE INDEX evsearch_idx on events using gist((title || ' ' || description) gist_trgm_ops) 我的问题是: SELECT * FROM events WHERE title || ' ' || description ILIKE '%book
事件表
,其中每个事件都有标题
和描述
。搜索应同时搜索两列:
标题:迪克(恩斯)和简描述:每周会面讨论经典书籍 鉴于上述情况,我想查询
图书俱乐部
我的索引:
CREATE INDEX evsearch_idx on events using gist((title || ' ' || description) gist_trgm_ops)
我的问题是:
SELECT * FROM events WHERE title || ' ' || description ILIKE '%book club%'
我认为问题在于我根本上误解了索引的工作原理,因此它试图将整个字符串
book club
匹配到不同的三个字母组合,但我不确定如何解决这个问题。ILIKE
将始终尝试匹配整个字符串。例如,要匹配像“%book club%”这样的i
,字符串需要包含整个字符串book club
如果要使用pg_trm
的相似性匹配潜力,则需要使用为其设计的匹配运算符。摘自:
%
如果其参数的相似性大于pg_trgm.similarity_threshold设置的当前相似性阈值,则返回true也许您希望从标题| |“| |”描述类似“%”(book | club)%”的事件中选择*
如果我搜索jane
,在这种情况下不会返回任何内容。在查找多个时,是否需要对一个单词使用ILIKE
,并对类似于的单词使用从事件中选择*,其中标题| | | | |描述类似于“%(Jane)%”