GithubHelp home page GithubHelp logo

searchawesome's Introduction

SearchAwesome

This is an exploration of how could we use Postgres' full text search capabilities to search user accounts

Setup

create extension unaccent;
create extension fuzzystrmatch;

create table users (
	id int generated always as identity primary key,
	ma_id text,
	da_id text,
	name text,
	display_name text,
	email text,
	ts tsvector
);

CREATE or replace FUNCTION users_trigger() RETURNS trigger AS $$
declare
	email_domain text;
begin
	email_domain := SUBSTRING(new.email, position('@' in new.email));
 	new.ts :=
  		setweight(to_tsvector('simple', coalesce(new.name, '')), 'A') ||
		setweight(to_tsvector('simple', unaccent(coalesce(new.name, ''))), 'B') ||
  		setweight(to_tsvector('simple', unaccent(coalesce(new.display_name, ''))), 'B') ||
	  	setweight(to_tsvector('simple', coalesce(email_domain, '')), 'B') ||
		setweight(to_tsvector('simple', coalesce(new.email, '')), 'C');
	return new;
end
$$ LANGUAGE plpgsql;

CREATE TRIGGER users_tsvectorupdate BEFORE INSERT OR UPDATE
    ON users FOR EACH ROW EXECUTE FUNCTION users_trigger();
   
CREATE INDEX users_ts_idx ON users USING gin(ts);

searchawesome's People

Contributors

davidkvc avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.