Full text Search

Full text Search

Postby Otto » Tue Jan 30, 2007 6:46 pm

How could I manage a full text search in the whole database like LOCATE but in all fields?
Regards
Otto
User avatar
Otto
 
Posts: 6070
Joined: Fri Oct 07, 2005 7:07 pm

Postby Antonio Linares » Tue Jan 30, 2007 6:52 pm

Otto,

At( cText, MemoRead( "file.dbf" ) )

once found, substract the DBF header size, and divide it by the record size
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41408
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Otto » Tue Jan 30, 2007 7:33 pm

Thank you. I there a limit for memoread: FW FWH

Regards
Otto
User avatar
Otto
 
Posts: 6070
Joined: Fri Oct 07, 2005 7:07 pm

Postby Antonio Linares » Tue Jan 30, 2007 10:01 pm

Otto,

MemoRead() is a Harbour function. There is no size limit (max. 4 gigs)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41408
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Gale FORd » Tue Jan 30, 2007 11:34 pm

If you have xHarbour from .com then you can use FTS (Full Text Search) to create index and search.
Gale FORd
 
Posts: 663
Joined: Mon Dec 05, 2005 11:22 pm
Location: Houston

Postby hua » Wed Jul 18, 2007 5:07 am

Antonio Linares wrote:At( cText, MemoRead( "file.dbf" ) )

once found, substract the DBF header size, and divide it by the record size


This is a neat trick! What further modification need to be done to take into account contents of memo fields also?
hua
 
Posts: 1050
Joined: Fri Oct 28, 2005 2:27 am

Postby Antonio Linares » Wed Jul 18, 2007 6:38 am

memo fields require a different approach as they are not stored in the DBF, but on an external file. You can search in such external file, and then you should search its offset into the DBF.

You may ask Przemek how to get the memo offset from the DBF
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41408
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Full text Search

Postby StefanHaupt » Wed Jul 18, 2007 7:58 am

Otto,

Otto wrote:How could I manage a full text search in the whole database like LOCATE but in all fields?
Regards
Otto


you can try the Hiper-Seek functions of xHarbour. That´s a very fast seek over all fields in dbf. But I don´t know, if it supports memo too.

Here is an example:




Code: Select all  Expand view
#INCLUDE "Fivewin.ch"
#include "dbinfo.ch"

//REQUEST RMDBFCDX
REQUEST DBFCDX
//REQUEST BMDBFCDX

PROCEDURE Main()
   FIELD FIRST, LAST, STREET, CITY
   LOCAL n, hs

   rddSetDefault( "DBFCDX" )
//   rddSetDefault( "BMDBFCDX" )
//   if ascan( rddList(1), "RMDBFCDX" ) != 0
//      rddSetDefault( "RMDBFCDX" )
//   endif
//   ? RddSetDefault ()
   use test
   hs := HS_INDEX( "test", "FIRST+LAST+STREET+CITY", 2, 0, , .T., 3 )

   /* Look for all records which have 'SHERMAN' string inside */
   HS_SET( hs, "SHERMAN" )
   while ( n := HS_NEXT( hs ) ) > 0
      dbgoto( n )
      if HS_VERIFY( hs ) > 0
         ? rtrim( FIRST+LAST+STREET+CITY )
      endif
   enddo
//   wait

   /* Does RDD support Record Map Filters? */
//   if dbinfo( DBI_RM_SUPPORTED )
      /* if yest then let set filter for all records with 'SHERMAN'
         word and look at them in browser */
      HS_FILTER( hs, "SHERMAN" )
      DbSetFilter( {|| "SHERMAN"},  "SHERMAN" )
      dbgotop()
      browse()
//   endif

   HS_CLOSE( hs )
   CLOSE ALL
   QUIT

RETURN
kind regards
Stefan
StefanHaupt
 
Posts: 824
Joined: Thu Oct 13, 2005 7:39 am
Location: Germany

Memoread

Postby Otto » Thu Jun 26, 2008 8:36 pm

Hello Antonio,

I would like to use your solution.
But now I face the problem that some dbf files only return 4 or 5 bytes.
If I try to open the clients.dbf form the Fivewin sample this is the result:

local cText := MemoRead( "clientes.dbf" )

msginfo(ctext )

Image



Otto,

At( cText, MemoRead( "file.dbf" ) )

once found, substract the DBF header size, and divide it by the record size
_________________
regards, saludos

Antonio Linares
User avatar
Otto
 
Posts: 6070
Joined: Fri Oct 07, 2005 7:07 pm

Postby Antonio Linares » Thu Jun 26, 2008 8:54 pm

Otto,

You can't see it as it has embedded zeroes. Try this:

MsgInfo( Len( ctext ) )
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41408
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Otto » Thu Jun 26, 2008 9:12 pm

Thank you Antonio.
User avatar
Otto
 
Posts: 6070
Joined: Fri Oct 07, 2005 7:07 pm

Postby Ollie » Wed Nov 26, 2008 12:04 pm

Hi Stefan,

I get a "Unresolved External _HB_FUN_HS_INDEX" error when I try to compile your test. According to the help file I need - xhb.lib - is that correct? I can't find that lib on my PC, and yet I have xHarbour? Any ideas as to what I am doing wrong?

Did you ever find out if the Hyperseek works on MEMO fields too?

Antonio, do you know how to get the memo offset from the DBF if I use your method? (in case Hyperseek doesn't work for MEMOs)
Many thanks
Ollie.

Using:
xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6406)
Borland C++ 5.5.1
FWH 9.04 (2009 Apr)
Ollie
 
Posts: 233
Joined: Sat Dec 30, 2006 6:10 am

Postby Antonio Linares » Wed Nov 26, 2008 2:11 pm

Ollie,

> Antonio, do you know how to get the memo offset from the DBF

What RDD are you using ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41408
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Ollie » Wed Nov 26, 2008 2:15 pm

DBFCDX
Many thanks
Ollie.

Using:
xHarbour Compiler build 1.2.1 (SimpLex) (Rev. 6406)
Borland C++ 5.5.1
FWH 9.04 (2009 Apr)
Ollie
 
Posts: 233
Joined: Sat Dec 30, 2006 6:10 am

Postby Antonio Linares » Wed Nov 26, 2008 2:29 pm

Ollie,

I guess that you could use:

DbInfo( DBI_BLOB_OFFSET )
http://www.ousob.com/ng/53guide/ng28fbc.php

and/or

DbFieldInfo( DBS_BLOB_OFFSET )
http://www.ousob.com/ng/53guide/ng25343.php
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41408
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 39 guests