Thread: Most efficient way to achieve this ts_query

Most efficient way to achieve this ts_query

From
"Jamie Tufnell"
Date:
Hi

If someone uses a search query on my site like this:

"abc def"

I would like to return all results for 'abc & def' first, followed by
all results for tsquery 'abc | def' is there some way to express this
in one tsquery?  What's the most efficient way to go about this?  The
search is on one column.

Thanks
Jamie


Re: Most efficient way to achieve this ts_query

From
Frank Bax
Date:
Jamie Tufnell wrote:
> If someone uses a search query on my site like this:
> 
> "abc def"
> 
> I would like to return all results for 'abc & def' first, followed by
> all results for tsquery 'abc | def' is there some way to express this
> in one tsquery?  What's the most efficient way to go about this?  The
> search is on one column.


SELECT * FROM table WHERE field='abc' OR field~'def'
ORDER BY CASE WHERE field~'abc' AND field~'def' THEN 1 ELSE 0 END DESC;


Re: Most efficient way to achieve this ts_query

From
"Jamie Tufnell"
Date:
On 10/16/08, Frank Bax <fbax@sympatico.ca> wrote:
> Jamie Tufnell wrote:
>> If someone uses a search query on my site like this:
>>
>> "abc def"
>>
>> I would like to return all results for 'abc & def' first, followed by
>> all results for tsquery 'abc | def' is there some way to express this
>> in one tsquery?  What's the most efficient way to go about this?  The
>> search is on one column.
>
>
> SELECT * FROM table WHERE field='abc' OR field~'def'
> ORDER BY CASE WHERE field~'abc' AND field~'def' THEN 1 ELSE 0 END DESC;

I am using tsqueries though (to_tsquery() and to_tsvector()) to
benefit from stemming.

I understand how your approach might still apply, but I'm curious to
know if that's the best way, or can it be done in a single
to_tsquery(), with a single MATCH ?

Thanks,
Jamie