Re: External search engine, advice

From: mlw <markw(at)mohawksoft(dot)com>
To: Hackers List <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: External search engine, advice
Date: 2001-05-20 02:35:54
Message-ID: 3B072D8A.CFCA51D5@mohawksoft.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

mlw wrote:
>
> I have an external search engine system which plugs in to postgres. I use a few
> C functions to interface the search daemon with the Postgres back-end.
>
> The best that I have been able to do is do a "select" for each result. I have a
> live demo/test site:
>
> http://www.mohawksoft.com/search.php3, and the PHP source code is at
> http://www.mohawksoft.com/ftss_example.txt.
>
> I would love to get the results with one select statement, but have, to date,
> been unable to figure out how. Anyone with any ideas?

Well, I think I got it, and I am posting so that people trying to do what I am
doing, can look through the postings!!

Datum ftss_search(PG_FUNCTION_ARGS)
{
int4 result;
int state;

if(!fcinfo->resultinfo)
{
PG_RETURN_NULL();
}
state = search_state();
if(state == 0)
{
text * string= PG_GETARG_TEXT_P(0);
int len = VARSIZE(string)-VARHDRSZ;
char szString[len+1];
memcpy(szString, VARDATA(string), len);
szString[len]=0;
search(DEFAULT_PORT, DEFAULT_HOST, szString);
}
if(search_nextresult(&result))
{
ReturnSetInfo *rsi = (ReturnSetInfo *)fcinfo->resultinfo;
rsi->isDone = ExprMultipleResult;
PG_RETURN_INT32(result);
}
else
{
ReturnSetInfo *rsi = (ReturnSetInfo *)fcinfo->resultinfo;
rsi->isDone = ExprEndResult ;
}
PG_RETURN_NULL();
}

The above is an example of how to write a function that returns multiple
results.

create function ftss_search (varchar)
returns setof integer
as '/usr/local/lib/library.so', 'ftss_search'
language 'c' with (iscachable);

The above in an example of how one would register this function in postgres.

select table.* from table, (select fts_search('all { bla bla }') as key) as
result where result.key = table.key;

The above is an example of how to use this function.

Thanks everyone for you help.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 2001-05-20 02:50:17 Re: Fix for tablename in targetlist
Previous Message mlw 2001-05-20 01:34:27 Re: Functions returning sets