Namazu-devel-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

libnmz interface (Re: my plan)



Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx> wrote:

>libnmz のインターフェイスは glib 風に
>
>  Namazu *foo = nmz_new();
>  nmz_add_index(foo, "/where/foo/index/is");
>  nmz_search(foo, query);
>    :
>  nmz_destroy(foo);

考え直しました。こんな感じでいかがでしょう?

int
main()
{
    // 検索結果用のオブジェクト
    NmzDocList *result;

    // クエリーは単なる文字列
    char *query = "foo and bar";

    // インデックスの集合を扱うオブジェクトを生成する
    NmzIdxSet *foo = nmz_new_idxset();

    // 設定ファイルを読み込む
    nmz_load_rcfile();

    // 検索対象のインデックスを登録する
    nmz_idxset_add(foo, "/foo/bar/Namazu/idx1");
    nmz_idxset_add(foo, "/foo/bar/Namazu/idx2");
    nmz_idxset_add(foo, "/foo/bar/Namazu/idx3");
    
    // 検索結果 (ヒットした文書のリスト) を得る
    result = nmz_idxset_search(foo, query1);
    // 同じインデックス修業に対して別のクエリーで検索できる
    // result2 = nmz_idxset_search(foo, query2);

    // 検索結果をソートする
    nmz_idxset_sort(result, NMZ_SORT_BY_SCORE);

    for (i = 0; i < result->len; i++) {
	// 文書のリストから n番目の文書へのポインタを得る
	NmzDoc *doc = nmz_doclist_nth_doc(result, i);

	// 検索結果表示用の要約を取り出す (NMZ.result に応じて)
	char *info  = nmz_idxset_get_summary(foo, doc, i);

	// HTMLタグを除去する (必要に応じて)
	nmz_dehtml(info);

	// 検索結果を表示する
	printf("%s\n", info);
    }

    // 後片づけ
    // nmz_idxset_destroy(foo);
    // nmz_doclist_destroy(result);

    return 0;
}