BTW, Oleg I don't need colasque since those values can't be null.




On Fri, Feb 6, 2009 at 4:11 PM, Oleg Bartunov <o...@sai.msu.su> wrote:

> James,
>
> syntax is documented on
>
> http://www.postgresql.org/docs/8.3/static/textsearch-tables.html#TEXTSEARCH-TABLES-SEARCH
> and in the Introduction
> http://www.postgresql.org/docs/8.3/static/textsearch-intro.html#TEXTSEARCH-MATCHING
> text-search operator was specified for tsvector @@ tsquery.
> You did wrong twice, you didn't specified type tsvector and you forgot
> about coalesce.
>
> There is general rule for partial indexes - you should use the same
> expression in query as you used in create index command.
>
> Oleg
> On Fri, 6 Feb 2009, James Dooley wrote:
>
>  Oleg, but I am only interested in whether or not the syntax of my
>> search-query is correct.
>>
>> Having created the index as I mentioned above, would the correct way of
>> searching and using that index be
>>
>> ... AND (title || '' || description || '' || name) @@
>> plainto_tsquery('car')
>>
>> or should it be as Richard just mentioned
>>
>> ... AND to_tsvector(title || '' || description || '' || name) @@
>> plainto_tsquery('car')
>>
>> or some other way ?
>>
>>
>>
>> On Fri, Feb 6, 2009 at 3:30 PM, Richard Huxton <d...@archonet.com> wrote:
>>
>>  James Dooley wrote:
>>>
>>>> Hi again,
>>>>
>>>> I have set my configuration as default and I have created a GIN index on
>>>> three columns, like this
>>>>
>>>> create index textsearch_index on products using gin(strip( to_tsvector(
>>>> 'my_config', title || '' || description || '' || name)))
>>>>
>>>> Searching these columns the way I have
>>>>
>>>> ... AND (title || '' || description || '' || name) @@
>>>>
>>> plainto_tsquery('car')
>>>
>>>>
>>>> seems not to be correct since it's taking as much time as non-indexed.
>>>>
>>>
>>> PG's planner isn't smart enough to transform a complex expression so as
>>> to use a functional index (which is what you've got). You need to
>>> mention the function explicitly.
>>>
>>> So, if you had:
>>>  CREATE INDEX lowercase_idx ON mytable ( lower(mycolumn) )
>>> You then need to search against "lower(mycolumn)" and not just expect
>>> the planner to notice that mycolumn="abc" could use the index.
>>>
>>> The following should work for you as a starting point:
>>>
>>> CREATE TABLE tsearch_tbl (id SERIAL, title text, body text,
>>> PRIMARY KEY (id));
>>>
>>> INSERT INTO tsearch_tbl (title, body)
>>> SELECT 'title number ' || n, 'This is body number ' || n
>>> FROM generate_series(1,9999) n;
>>>
>>> ANALYSE tsearch_tbl;
>>>
>>> CREATE INDEX tsearch_tbl_words_idx ON tsearch_tbl USING gin (
>>> to_tsvector('english', title || body) );
>>>
>>> EXPLAIN ANALYSE SELECT * FROM tsearch_tbl WHERE to_tsvector('english',
>>> title || body) @@ to_tsquery('17');
>>>                                                         QUERY PLAN
>>>
>>>
>>>
>>> -------------------------------------------------------------------------------------------------------------------------------
>>>  Bitmap Heap Scan on tsearch_tbl  (cost=4.34..34.76 rows=10 width=45)
>>> (actual time=0.067..0.067 rows=1 loops=1)
>>>  Recheck Cond: (to_tsvector('english'::regconfig, (title || body)) @@
>>> to_tsquery('17'::text))
>>>  ->  Bitmap Index Scan on tsearch_tbl_words_idx  (cost=0.00..4.34
>>> rows=10 width=0) (actual time=0.059..0.059 rows=1 loops=1)
>>>        Index Cond: (to_tsvector('english'::regconfig, (title || body))
>>> @@ to_tsquery('17'::text))
>>>  Total runtime: 0.121 ms
>>>
>>>
>>> Note that you'll have problems if any of your text-fields contain nulls
>>> (since null || anything = null).
>>>
>>> Personally, unless I'm dealing with a large table, I like to have a
>>> separate tsvector column which I keep up to date with triggers. It makes
>>> it easier to debug problems.
>>>
>>> --
>>>  Richard Huxton
>>>  Archonet Ltd
>>>
>>>
>>
>        Regards,
>                Oleg
> _____________________________________________________________
> Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
> Sternberg Astronomical Institute, Moscow University, Russia
> Internet: o...@sai.msu.su, 
> http://www.sai.msu.su/~megera/<http://www.sai.msu.su/%7Emegera/>
> phone: +007(495)939-16-83, +007(495)939-23-83
>

Reply via email to