Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 将查询的部分与三元索引匹配_Postgresql_Search_Trigram_Textmatching - Fatal编程技术网

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)%”