Prev | Appendix B. Install additional supporting software | Next

## Install Full Text Search using OpenFTS (deprecated see tsearch2)

By Joel Aufrecht and Malte Sussdorff

OpenACS docs are written by the named authors, and may be edited by OpenACS documentation staff.

OpenFTS and tsearch1 use is deprecated in favor of Tsearch2. See Install Full Text Search using Tsearch2. Tsearch2 is much easier to install, requiring only compilation of one module from PostgreSQL contrib, with an automated install process using the tsearch2-driver package.

### Install OpenFTS module

If you want full text search, and you are running PostgreSQL, install this module to support FTS. Do this step after you have installed both PostgreSQL and AOLserver. You will need the openfts tarball in `/tmp`.

1. Install Tsearch. This is a PostgreSQL module that OpenFTS requires.

       [root root]# su - postgres
       [postgres pgsql]$ cd /usr/local/src/postgresql-7.3.4/contrib/tsearch/
       [postgres tsearch]$ make
       sed 's,MODULE_PATHNAME,$libdir/tsearch,g' tsearch.sql.in >tsearch.sql
       /usr/bin/flex  -8 -Ptsearch_yy -o'parser.c' parser.l(many lines omitted)
       rm -f libtsearch.so
       ln -s libtsearch.so.0.0 libtsearch.so
       [postgres tsearch]$ make install
       mkdir /usr/local/pgsql/share/contrib
       mkdir /usr/local/pgsql/doc/contrib
       (2 lines omitted)
       /bin/sh ../../config/install-sh -c -m 755 libtsearch.so.0.0 /usr/local/pgsql/lib/tsearch.so
       [postgres tsearch]$ exit
       logout

       [root root]#
       su - postgres
       cd /usr/local/src/postgresql-7.3.4/contrib/tsearch
       make
       make install
       exit

2. Unpack the OpenFTS tarball and compile and install the driver.

       [root root]# cd /usr/local/src
       [root src]# tar xzf /tmp/Search-OpenFTS-tcl-0.3.2.tar.gz
       [root src]# cd /usr/local/src/Search-OpenFTS-tcl-0.3.2/
       [root Search-OpenFTS-tcl-0.3.2]# ./configure --with-aolserver-src=/usr/local/src/aolserver/aolserver --with-tcl=/usr/lib/
       checking prefix... /usr/local
       checking for gcc... gcc
       (many lines omitted)
       configure: creating ./config.status
       config.status: creating Makefile.global
       [root Search-OpenFTS-tcl-0.3.2]# make
       (cd parser; make all)
       make[1]: Entering directory `/usr/local/src/Search-OpenFTS-tcl-0.3.2/parser'
       (many lines omitted)
       packages provided were {Lingua::Stem::Snowball 0.3.2}
       processed fts_base_snowball.tcl
       [root Search-OpenFTS-tcl-0.3.2]# cd aolserver
       [root aolserver]# make
       gcc -c -fPIC  -DPACKAGE=\"OPENFTS\" -DVERSION=\"0.3.2\" -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STR
       (many lines omitted)
       n_stem.o italian_stem.o norwegian_stem.o portuguese_stem.o russian_stem.o nsfts.o  -o nsfts.so
       [root aolserver]# cp nsfts.so /usr/local/aolserver/bin/
       [root aolserver]#
       cd /usr/local/src
       tar xzf /tmp/Search-OpenFTS-tcl-0.3.2.tar.gz
       cd /usr/local/src/Search-OpenFTS-tcl-0.3.2/
       ./configure --with-aolserver-src=/usr/local/src/aolserver/aolserver --with-tcl=/usr/lib/
       make
       cd aolserver
       make
       cp nsfts.so /usr/local/aolserver/bin

3. Build some supplemental modules.

       [root aolserver]# cd /usr/local/src/Search-OpenFTS-tcl-0.3.2
       [root Search-OpenFTS-tcl-0.3.2]# cp -r pgsql_contrib_openfts /usr/local/src/postgresql-7.3.4/contrib
       [root Search-OpenFTS-tcl-0.3.2]# cd /usr/local/src/postgresql-7.3.4/contrib/pgsql_contrib_openfts
       [root pgsql_contrib_openfts]# make
       sed 's,MODULE_PATHNAME,$libdir/openfts,g' openfts.sql.in >openfts.sql
       gcc -O2 -Wall -Wmissing-prototypes -Wmissing-declarations -fpic -I. -I../../src/include   -c -o openfts.o openfts.c
       gcc -shared -o openfts.so openfts.o
       rm openfts.o
       [root pgsql_contrib_openfts]# su postgres
       [postgres pgsql_contrib_openfts]$ make install
       /bin/sh ../../config/install-sh -c -m 644 openfts.sql /usr/local/pgsql/share/contrib
       /bin/sh ../../config/install-sh -c -m 755 openfts.so /usr/local/pgsql/lib
       /bin/sh ../../config/install-sh -c -m 644 ./README.openfts /usr/local/pgsql/doc/contrib
       [postgres pgsql_contrib_openfts]$ exit
       [root pgsql_contrib_openfts]#
       cd /usr/local/src/Search-OpenFTS-tcl-0.3.2
       cp -r pgsql_contrib_openfts /usr/local/src/postgresql-7.3.4/contrib
       cd /usr/local/src/postgresql-7.3.4/contrib/pgsql_contrib_openfts
       make
       su postgres
       make install
       exit

### Install OpenFTS prerequisites in PostgreSQL instance

If you are installing Full Text Search, add required packages to the new database. (In order for full text search to work, you must also install the PostgreSQL OpenFTS module and prerequisites.)

    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ /usr/local/pgsql/bin/psql $OPENACS_SERVICE_NAME -f /usr/local/src/postgresql-7.3.4/contrib/tsearch/tsearch.sql
    BEGIN
    CREATE
    (many lines omitted)
    INSERT 0 1
    COMMIT
    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ /usr/local/pgsql/bin/psql $OPENACS_SERVICE_NAME -f /usr/local/src/postgresql-7.3.4/contrib/pgsql_contrib_openfts/openfts.sql
    CREATE
    CREATE
    [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$
    /usr/local/pgsql/bin/psql $OPENACS_SERVICE_NAME -f /usr/local/src/postgresql-7.3.4/contrib/tsearch/tsearch.sql
    /usr/local/pgsql/bin/psql $OPENACS_SERVICE_NAME -f /usr/local/src/postgresql-7.3.4/contrib/pgsql_contrib_openfts/openfts.sql

### Note

If you get the error `ERROR: could not access file "$libdir/tsearch": no such file or directory` It is probably because PostgreSQL's libdir configuration variable points to a diffent directory than where tsearch is. You can find out where PostgreSQL expects to find tsearch via

    pg_config --pkglibdir

### Enable OpenFTS in config.tcl

If you have installed OpenFTS, you can enable it for this service. Uncomment this line from `config.tcl`. (To uncomment a line in a tcl file, remove the `#` at the beginning of the line.)

    #ns_param   nsfts           ${bindir}/nsfts.so

### Install Full Text Search Engine

1. Click `Admin` on the top of the default home page. If prompted, log in with the account and password you entered during install.

2. Click on the `Install software` link.

3. Click on the `Install new service` link.

4. Click on the `Install` link next to OpenFTS Driver.

5. Restart the service.

       [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ svc -t /service/$OPENACS_SERVICE_NAME
       [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$

6. Wait a minute, then browse back to the home page.

7. Click on `Admin` on the top of the screen.

8. Click on `Main Site Administration` in the "Subsite Administration" section.

9. Click on `Site Map` in the "Advanced Features" section.

10. Mount the OpenFTS Full Text Search Engine in the site map.

    1. Click the `new sub folder` link on the "/" line, the first line under Main Site:/.

    2. Type `openfts` and click `New`.

    3. On the new `openfts` line, click the `mount` link.

    4. Click `OpenFTS Driver`.

    5. On the `openfts` line, click `set parameters`.

    6. Change `openfts_tcl_src_path` to `/usr/local/src/Search-OpenFTS-tcl-0.3.2/` and click `Set Parameters`

11. Mount the Search interface in the site map.

    1. Click the `new sub folder` link on the Main Site line.

    2. Type `search` and click `New`.

    3. Click the `new application` link on the `search` line.

    4. Type `search` where it says `untitled`, choose `search` from the drop-down list, and click `New`.

12. Restart the service.

        [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ svc -t /service/$OPENACS_SERVICE_NAME
        [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$

13. Wait a minute, then click on `Main Site` at the top of the page.

14. Initialize the OpenFTS Engine. This creates a set of tables in the database to support FTS.

    Near the bottom of the page, click on the `OpenFTS Driver` link. Click on `Administration`. Click on `Initialize OpenFTS Engine`. Click `Initialize OpenFTS Engine`.

15. Add the FTS Engine service contract

    1. Click on the `DevAdmin`.

    2. Click on the `Service Contract` link.

    3. On the `FtsEngineDriver` line, click `Install`.

16. Restart the service.

        [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ svc -t /service/$OPENACS_SERVICE_NAME
        [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$

### Enable Full Text Search in packages

Enabling Full Text Search in packages at the moment is not trivial. It involves a couple of steps, which I will illustrate taking lars-blogger as an example package

1. Install the package.

   1. Click `Admin` on the top of the default home page. If prompted, log in with the account and password you entered during install.

   2. Click on the `Install software` link.

   3. Click on the `Install new application` link.

   4. Click on the `Install` link next to Weblogger.

   5. Install all required packages as well (always say okay until you shall restart the server)

2. Load the service contracts datamodell and enable the service contract

       [$OPENACS_SERVICE_NAME $OPENACS_SERVICE_NAME]$ cd packages/lars-blogger/sql/postgresql
       [$OPENACS_SERVICE_NAME postgresql]$ psql $OPENACS_SERVICE_NAME -f lars-blogger-sc-create.sql

   Note: Usually this script is called package_name-sc-create.sql

3. Restart the service.

       [$OPENACS_SERVICE_NAME postgresql]$ svc -t /service/$OPENACS_SERVICE_NAME
                       [$OPENACS_SERVICE_NAME postgresl]$

If you are lucky, Full Text Search is enabled now, if not consult http://openacs.org/forums/message-view?message_id=154759. This link also contains some hints on how to make sure it is enabled.

Prev | Home | Next
Install Full Text Search using Tsearch2 | Up | Install nsopenssl

View comments on this page at openacs.org