Thread: multi-word expression full-text searching
Hello all: I'm testing all full-text searching possibilities of PostgreSQL and... Is it possible to search for a multi-word expression? I can search one or more words: SELECT id FROM document WHERE to_tsvector('english',text) @@ to_tsquery('english','despite'); SELECT id FROM document WHERE to_tsvector('english',text) @@ to_tsquery('english','despite & subject'); But it seems not be possible to do a query like: SELECT id FROM document WHERE to_tsvector('english',text) @@ to_tsquery('english','despite this'); to search the documents in which occur the expression "despite this". This last query gives the following error: ERROR: syntax error in tsquery: "despite this" Is it really impossible to searh a multi-word expression? Thanks in advance, Mario Barcala
SELECT id FROM document WHERE to_tsvector('english',text) @@ plainto_tsquery('english','despite this'); -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/
> > SELECT id FROM document WHERE to_tsvector('english',text) @@ > plainto_tsquery('english','despite this'); > -- > Teodor Sigaev If I understand well the plainto_tsquery behaviour, this query match with: Despite this, the president went out. Despite the event, this question arise. i.e., if "this" is not inside the stopwords list, the query is translated to: SELECT id FROM document WHERE to_tsvector('english',text) @@ to_tsquery('english','despite & this'); It searches for documents which include "despite" and "this", and not for ones which have the expression "despite this". I have made some tests and they confirm my explanations. Thank you anyway. Any other solution? Mario Barcala
On Tue, 1 Jul 2008, lbarcala@freeresearch.org wrote: >> >> SELECT id FROM document WHERE to_tsvector('english',text) @@ >> plainto_tsquery('english','despite this'); >> -- >> Teodor Sigaev > > If I understand well the plainto_tsquery behaviour, this query match with: > > Despite this, the president went out. > Despite the event, this question arise. You want 'phrase search', which doesn't supported yet. There are several workarounds, search archives for 'phrase search' > > i.e., if "this" is not inside the stopwords list, the query is translated to: > SELECT id FROM document WHERE to_tsvector('english',text) @@ > to_tsquery('english','despite & this'); > > It searches for documents which include "despite" and "this", and not for > ones which have the expression "despite this". > > I have made some tests and they confirm my explanations. > > Thank you anyway. > > Any other solution? > > Mario Barcala > > > > > > Regards, Oleg _____________________________________________________________ Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru), Sternberg Astronomical Institute, Moscow University, Russia Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/ phone: +007(495)939-16-83, +007(495)939-23-83
> If I understand well the plainto_tsquery behaviour, this query match with: > Despite this, the president went out. > Despite the event, this question arise. Right, you mean phrase search. Read the thread: http://archives.postgresql.org/pgsql-hackers/2008-05/msg01111.php Suggested patch should be made as module, I think. -- Teodor Sigaev E-mail: teodor@sigaev.ru WWW: http://www.sigaev.ru/