feature #26: use ZDB index to find article and constitution
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
create or replace function find_articles(
|
create or replace function find_articles(
|
||||||
search text default null,
|
_search text default null,
|
||||||
direction text default 'desc',
|
direction text default 'desc',
|
||||||
sort text default 'created_at',
|
sort text default 'created_at',
|
||||||
"limit" int default 50,
|
"limit" int default 50,
|
||||||
@@ -9,15 +9,17 @@ create or replace function find_articles(
|
|||||||
) language plpgsql as
|
) language plpgsql as
|
||||||
$$
|
$$
|
||||||
begin
|
begin
|
||||||
select json_agg(t), (select count(id) from article)
|
select json_agg(t), (select count(id) from article a where _search is null or _search = '' or a ==> dsl.multi_match('{title^3, content, description}', _search))
|
||||||
into resource, total
|
into resource, total
|
||||||
from (
|
from (
|
||||||
select
|
select
|
||||||
a.*,
|
a.*,
|
||||||
find_citizen_by_id(a.created_by_id) as created_by
|
find_citizen_by_id(a.created_by_id) as created_by,
|
||||||
|
zdb.score(a.ctid) _score
|
||||||
from article as a
|
from article as a
|
||||||
where "search" is null or title ilike '%'||"search"||'%'
|
where _search is null or _search = '' or a ==> dsl.multi_match('{title^3, content, description}', _search)
|
||||||
order by
|
order by
|
||||||
|
_score desc,
|
||||||
case direction when 'asc' then
|
case direction when 'asc' then
|
||||||
case sort
|
case sort
|
||||||
when 'title' then a.title
|
when 'title' then a.title
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
create or replace function find_constitutions(
|
create or replace function find_constitutions(
|
||||||
search text default null,
|
_search text default null,
|
||||||
direction text default 'desc',
|
direction text default 'desc',
|
||||||
sort text default 'created_at',
|
sort text default 'created_at',
|
||||||
"limit" int default 50,
|
"limit" int default 50,
|
||||||
@@ -9,15 +9,16 @@ create or replace function find_constitutions(
|
|||||||
) language plpgsql as
|
) language plpgsql as
|
||||||
$$
|
$$
|
||||||
begin
|
begin
|
||||||
select json_agg(t), (select count(id) from constitution)
|
select json_agg(t), (select count(id) from constitution c where _search is null or _search = '' or c ==> dsl.multi_match('{title^3, intro}', _search))
|
||||||
into resource, total
|
into resource, total
|
||||||
from (
|
from (
|
||||||
select
|
select
|
||||||
c.*,
|
c.*,
|
||||||
find_citizen_by_id(c.created_by_id) as created_by,
|
find_citizen_by_id(c.created_by_id) as created_by,
|
||||||
find_constitution_titles_by_id(c.id) as titles
|
find_constitution_titles_by_id(c.id) as titles,
|
||||||
|
zdb.score(c.ctid) _score
|
||||||
from constitution as c
|
from constitution as c
|
||||||
where "search" is null or title ilike '%'||"search"||'%'
|
where _search is null or _search = '' or c ==> dsl.multi_match('{title^3, intro}', _search)
|
||||||
order by
|
order by
|
||||||
case direction when 'asc' then
|
case direction when 'asc' then
|
||||||
case sort
|
case sort
|
||||||
|
|||||||
Reference in New Issue
Block a user