[Xapian] [Omega] [PHP] Hoe xapian vanuit php?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:29
Ik ben bezig mijn site te indexeren met xapian. Ik heb begrepen dat GoT ook gebruik maakt van xapian, met de omega frontend.

Ik zou graag willen weten hoe via php de omega frontend wordt aangesproken? Gaat dit met exec() functies o.i.d. of is er een nettere oplossing voor?

Heeft iemand de PHP bindings van xapian al werkend gekregen en voor mij een goed voorbeeld hoe je documenten toevoegd aan de database en vervolgens zoekt?

De online voorbeelden zijn echt minimaal...

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

maartenvdv737 schreef op zaterdag 28 oktober 2006 @ 08:20:
Ik zou graag willen weten hoe via php de omega frontend wordt aangesproken? Gaat dit met exec() functies o.i.d. of is er een nettere oplossing voor?
In eerste instantie deden we dat met een pipe. Werkt prima, gewoon de parameters op de commandline meegeven en klaar.
Maar toen de database op een remote systeem ging draaien heb ik een constructie bedacht met xinetd, werkt verder hetzelfde je gebruikt omega als applicatie in een willekeurige xinetd-service en connect daarnaartoe met een normale tcp-socket. Vervolgens geef je dan de zoekparameters (voor elke parameter een losse regel), precies zoals omega werkt als je het op de cli opent zonder extra parameters.
Heeft iemand de PHP bindings van xapian al werkend gekregen en voor mij een goed voorbeeld hoe je documenten toevoegd aan de database en vervolgens zoekt?
Jahoor, ook dat heb ik wel aan de praat gehad. De in de source meegeleverde simplesearch.php en simpleindex.php oid zijn vziw wel vrij aardige bronnen?
De online voorbeelden zijn echt minimaal...
Ja, de documentatie is wat krapjes.

Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Klinkt vast harstikke dom en heel erg MS minded, maar waarom maak je geen XML-output aan op de remote server die je op de local server via XSLT parsed? Dat voorkomt dat je record sets moet formatten uit de output van een cli...
En of je dan fancy oplossingen als Webservices gaat gebruiken, dat moet je dan zelf weten... Daarnaast zou het platform en taal onafhankelijk kunnen functioneren,

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:29
De xapian database komt sowieso op een andere server dan de frontends waarop de bezoekers connecten. Waarschijnlijk is echter een nfs share makkelijker dan een xinetd verbinding.

Verder, wat ik niet terug kon vinden in de documentatie van xapian/omega.
- hoe zet je een max op de resultaten die je terug wilt?
- moet je de cgi files van omega via de browser toegankelijk maken?

Wat zou een reden zijn om met omega te werken en niet via de php bindings?

[ Voor 9% gewijzigd door maartenvdv737 op 28-10-2006 13:54 ]

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:29
Misschien kan iemand mij meteen vertellen of je de omega scriptindex binary ook via de commandline de input kan geven (ipv de filename)?

Het is mij nog niet gelukt, en hoewel ik het een handig script vind, is het vrij onhandig om veel elke commit eerst een temp file te maken.

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:29
Tijdje geleden alweer, maar ik wil hier toch op terug komen.

Ik ben ook bezig een xinetd service te maken die de Omega binary toegankelijk maakt.
De service draait nu en is via telnet toegankelijk gebleken. De Omega binary werkt met de parameters die ik meegeef.

Nu wil ik de socket gebruiken om de parameters aan de binary te geven. Ik heb php niet gecompileerd met --with-sockets, dus ik gebruik fsockopen() in php.

De volgende code gebruik ik:
$omega is een string met de juiste NAME=VALUE parameters gescheiden door "\r\n" newlines. De string eindigt met een extra newline.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Execute omega binary with parameters
        $socket = fsockopen("ip-address", PORT_NUMBER, $errno, $errstr, 30);

        # header naar socket sturen
        $return = array();
        if( fwrite( $socket, $omega ) )
        {
            print_r( stream_get_meta_data( $socket ) );

            # output van socket [de PDF] opslaan
            while ( !feof( $socket ) )
            {
               $data = fgets( $socket, 1024 );
               print $data;
               $return[] = $data;
            }
        }
        else
        {
            # output sturen is mislukt
            echo "Het sturen is mislukt!";
        }

        fclose($socket);


Wat gebeurd er nu: de socket verbinding wordt gemaakt, maar het PHP script blijft lopen. Als ik dan op de socket server bak kijk zie ik dat de omega binary nog actief is, maar ik zie geen xinetd process actief.

Als ik de omega binary kill, dan krijg ik de volgende array terug van het php script:
Array ( [stream_type] => tcp_socket [mode] => r+ [unread_bytes] => 0 [seekable] => [timed_out] => [blocked] => 1 [eof] => )

Deze wordt gegenereerd door: stream_get_meta_data();

ACM en/of anderen, heeft iemand hier ervaring mee hoe ik die socket het beste kan benaderen vanuit PHP? Zware omega queries kunnen een paar seconden duren, dus de socket moet open blijven staan tot alle data er is..

Heel graag input!

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

maartenvdv737 schreef op dinsdag 05 december 2006 @ 21:37:
$omega is een string met de juiste NAME=VALUE parameters gescheiden door "\r\n" newlines. De string eindigt met een extra newline.
Probeer het eens zonder die \r ?

Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 19:29
Top, dat was het probleem!

Ik blijf er iig vrij nuchter onder....

Pagina: 1