Обсуждение: changing text search treatment of puncutation
Text with the '/' character gets treated as a file path, e.g.
select * from to_tsvector('english', 'home/work');
gives only the single token:
'home/work':1
Changing '/' to '-' gives
'home':2 'work':3 'home-work':1
which is much more desirable for this application.
Is there an easy way to change '/' to be treated like '-' ? I've
looked over the documentation several times and could not find
anything. Even just a way to get the two tokens 'home' and 'work'
without the joined form would be helpful.
Thanks,
John DeSoi, Ph.D.
John DeSoi <desoi@pgedit.com> writes:
> Is there an easy way to change '/' to be treated like '-' ? I've
> looked over the documentation several times and could not find
> anything. Even just a way to get the two tokens 'home' and 'work'
> without the joined form would be helpful.
Seems like the simplest solution is just to apply
regexp_replace(text, '/', '-', 'g')
before letting the text search stuff have the string. If you're
using a trigger to update a tsvector column, this would be pretty
trivial to do within the trigger.
In general there seem to be a lot of ways that people wish they
could tweak the text search parser, and telling them to write
their own parser isn't a very helpful response for most folk.
I don't have an idea about how to improve the situation, but
it seems like something that should be thought about.
regards, tom lane
> In general there seem to be a lot of ways that people wish they
> could tweak the text search parser, and telling them to write
> their own parser isn't a very helpful response for most folk.
> I don't have an idea about how to improve the situation, but
> it seems like something that should be thought about.
We (with Oleg) thought hard about it and we don't find a solution yet.
Configurable parser should be:
- fast
- flexible
- not error-prone
- comfortable to use by non-programmer (at least for non-C programmer)
It might be a table-driven state machine (just put TParserStateAction into
table(s) with some caching for first step) , but it's complex to operate and
it's needed to prove correctness of changes in states before its become in use.
--
Teodor Sigaev E-mail: teodor@sigaev.ru
WWW: http://www.sigaev.ru/
On Wed, 2 Jul 2008, Tom Lane wrote:
> John DeSoi <desoi@pgedit.com> writes:
>> Is there an easy way to change '/' to be treated like '-' ? I've
>> looked over the documentation several times and could not find
>> anything. Even just a way to get the two tokens 'home' and 'work'
>> without the joined form would be helpful.
>
> Seems like the simplest solution is just to apply
> regexp_replace(text, '/', '-', 'g')
> before letting the text search stuff have the string. If you're
> using a trigger to update a tsvector column, this would be pretty
> trivial to do within the trigger.
>
> In general there seem to be a lot of ways that people wish they
> could tweak the text search parser, and telling them to write
> their own parser isn't a very helpful response for most folk.
> I don't have an idea about how to improve the situation, but
> it seems like something that should be thought about.
Sure, we thought about this. The most difficult part in user-configurable
parser (we thought about table-driven finite automata) is the foolproof
design. There are should be algorithms for testing validity of finite
automata, but we don't know any effective way.
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