libnmz を使ったサンプル2008年06月23日 07時29分18秒

namazu や namazu.cgi は libnmz ライブラリを用いて検索を行っています。

ここでは libnmz を使った簡単な検索プログラムのサンプルを示します。

#include "namazu/libnamazu.h"
#include "namazu/field.h"
#include "namazu/hlist.h"
#include "namazu/idxname.h"
#include "namazu/i18n.h"
#include "namazu/search.h"
#include "namazu/codeconv.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
    int i;
    char buff[BUFSIZE] = "";
    NmzResult hlist;

    putenv("LANGUAGE=");
    putenv("LC_ALL=");
    putenv("LC_MESSAGES=");
    putenv("LANG=");
    nmz_set_lang("ja_JP.eucJP");

    nmz_set_sortmethod(SORT_BY_DATE);

    nmz_add_index("/usr/local/var/namazu/index");


    strncpy(buff, "namazu", BUFSIZE - 1);
    buff[BUFSIZE - 1] = '\0';

    nmz_codeconv_query(buff);

    hlist = nmz_search(buff);
    for(i = 0; i < hlist.num; i++) {
        char field[BUFSIZE];

        nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid,
            "from", field);
        fprintf(stdout, "%3d: %s\n", i, field);

        nmz_get_field_data(hlist.data[i].idxid, hlist.data[i].docid,
            "summary", field);
        fprintf(stdout, "     %s\n\n", field);
    }

    nmz_free_hlist(hlist);

    nmz_free_internal();
}

コンパイルは次のようにします。

$ cc sample.c -I/usr/local/include -L/usr/local/lib -lnmz
  • libnmz は GPL ですので、libnmz を利用したプログラムは GPL に矛盾しないライセンスで公開する必要があることに注意してください。
  • Perl モジュールの Search::Namazu も libnmz を利用したプログラムです。