egg 接口实例

实例

编译:gcc -g -Wall -O0 test.c -o test `pkg-config glib-2.0 --cflags --libs` -lscholar -legg2

#include <egg2/Egg2.h>
#include <scholar/ImLexAnalyzer.h>
#include <scholar/ImTokenList.h>
#include <scholar/ImCnLexAnalyzer.h>
#include <scholar/ImCwsLexAnalyzer.h>
int main()
{
HEGGDIRECTORY hDirectory = eggDirectory_open("/ape/ImRoBot5/index/bas/k2d/");
HEGGINDEXREADER hIndexReader = eggIndexReader_open(hDirectory);
HEGGINDEXSEARCHER hIndexSearcher = eggIndexSearcher_new(hIndexReader);
HEGGQUERY h1, h2, h3;
h1 = eggQuery_new_string("title", "new", 3, ANALYZER_CWSLEX);
h2 = eggQuery_new_string("content", "new", 3, ANALYZER_CWSLEX);
// h2 = eggQuery_new_string("body", "some description", 16, p_la);
// h3 = eggQuery_new_int32("price", 199);
// h2 = eggQuery_and(h3, h2);
h1 = eggQuery_or(h2, h1);
// h3 = h2 = 0;
HEGGTOPCOLLECTOR hTopCollector = eggTopCollector_new(0);
int ret = eggIndexSearcher_search_with_query(hIndexSearcher, hTopCollector, h1);
if (ret == EGG_TRUE)
{
eggTopCollector_normalized(hTopCollector, EGG_TOPSORT_SCORE);
// eggTopCollector_normalized(hTopCollector, EGG_TOPSORT_NOT);
HEGGSCOREDOC lp_score_doc = eggTopCollector_top_docs(hTopCollector);
count_t cnt = eggTopCollector_total_hits(hTopCollector);
printf("have hit %u documents\n", cnt);

if (cnt > 0)
{
printf("last document: id[%llu]\n", lp_score_doc[cnt-1].idDoc);
HEGGDOCUMENT lp_eggDocument = EGG_NULL;
eggIndexReader_get_document(hIndexReader,
lp_score_doc[cnt-1].idDoc, &lp_eggDocument);
HEGGFIELD lp_field = eggDocument_get_field(lp_eggDocument, "content");
unsigned len = 0;
char *val = eggField_get_value(lp_field, &len);
printf("last document: body[%.*s]\n", len, val);
lp_field = 0;
eggDocument_delete(lp_eggDocument);
}
}

eggTopCollector_delete(hTopCollector);
eggQuery_delete(h1);
eggIndexSearcher_delete(hIndexSearcher);
eggIndexReader_close(hIndexReader);
eggDirectory_close(hDirectory);
}

新版egg

 #include <egg2/Egg2.h>
#include <scholar/ImLexAnalyzer.h>
#include <scholar/ImTokenList.h>
int main()
{
HEGGHANDLE hEggHandle = eggCluster_open("192.168.1.135:4000:basnews");
HEGGINDEXREADER hIndexReader = eggIndexReader_open(hEggHandle);

HEGGINDEXSEARCHER hIndexSearcher = eggIndexSearcher_new(hIndexReader);
HEGGQUERY h1, h2, h3;
h1 = eggQuery_new_string("content", "日本的摄影记者", strlen("日本的摄影记者"), ANALYZER_CWSLEX);
h2 = eggQuery_new_int32("age", 20);
h3 = eggQuery_new_string("name", "小明", strlen("小明"), EGG_NULL);
h2 = eggQuery_and(h3, h2);
h1 = eggQuery_or(h2, h1);
h3 = h2 = 0;

//填0取所有结果,非0按填的值取个数
HEGGTOPCOLLECTOR hTopCollector = eggTopCollector_new(0);

//对最后结果进行排序
//EGG_TOPSORT_WEIGHT: 按document的weight排序
//EGG_TOPSORT_SCORE: 按查询关键字的相关度排序(打分排序)
//EGG_TOPSORT_NOT: 不排序
//不调该函数默认是EGG_TOPSORT_NOT
eggTopCollector_set_sortType(hTopCollector, EGG_TOPSORT_SCORE);
int ret = eggIndexSearcher_search_with_query(hIndexSearcher, hTopCollector, h1);
if (ret == EGG_TRUE)
{


HEGGSCOREDOC lp_score_doc = eggTopCollector_top_docs(hTopCollector);
count_t cnt = eggTopCollector_total_hits(hTopCollector);
printf("have hit %u documents\n", cnt);

if (cnt > 0)
{
HEGGDOCUMENT lp_eggDocument = EGG_NULL;

eggIndexReader_get_document(hIndexReader,
lp_score_doc[cnt-1].idDoc, &lp_eggDocument);

HEGGFIELD lp_field = eggDocument_get_field(lp_eggDocument, "content");
unsigned len = 0;
char *val = eggField_get_value(lp_field, &len);
lp_field = 0;
eggDocument_delete(lp_eggDocument);
}
}
eggTopCollector_delete(hTopCollector);
eggQuery_delete(h1);
eggIndexSearcher_delete(hIndexSearcher);
eggIndexReader_close(hIndexReader);
eggCluster_close(hEggHandle);

}





posted @ 2011-06-11 15:33  wangkangluo1  阅读(1062)  评论(0编辑  收藏  举报