簡體   English   中英

如何在PostgreSQL中用LOWER創建GIN索引?

[英]How to create GIN index with LOWER in PostgreSQL?

首先-我使用不支持ILIKE JPA ORM(EclipseLink)。 因此,我正在尋找不區分大小寫的搜索的解決方案。 我做了以下工作:

CREATE TABLE IF NOT EXISTS users (
    id SERIAL NOT NULL,
    name VARCHAR(512) NOT NULL,
    PRIMARY KEY (id));

CREATE INDEX users_name_idx ON users USING gin (LOWER(name) gin_trgm_ops);

INSERT INTO users (name) VALUES ('User Full Name');

但是,此查詢返回用戶:

SELECT * FROM users WHERE name ILIKE '%full%';

但這不是:

SELECT * FROM users WHERE name LIKE '%full%';

那么,如何在PostgreSQL中用LOWER創建GIN索引?

我不確定我是否理解這個問題。 因為您提到GIN並插入一行,並期望通過不區分大小寫的比較返回該行,但這是一個瘋狂的猜測-也許您正在尋找citext ?。

t=# create extension citext;
CREATE EXTENSION
t=# CREATE TABLE IF NOT EXISTS users (
    id SERIAL NOT NULL,
    name citext NOT NULL,
    PRIMARY KEY (id));
CREATE TABLE
t=# INSERT INTO users (name) VALUES ('User Full Name');
INSERT 0 1
t=# SELECT * FROM users WHERE name LIKE '%full%';
 id |      name
----+----------------
  1 | User Full Name
(1 row)

更新

基於表達式的索引需要查詢中的表達式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM