• 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);

    }





  • 相关阅读:
    人脸识别算法初次了解
    白话经典算法系列之二 直接插入排序的三种实现
    常见浏览器兼容性问题与解决方式
    MP3的频率、比特率、码率与音质的关系
    程序猿接私活经验总结,来自csdn论坛语录
    Java虚拟机工作原理具体解释
    簡單SQL存儲過程實例
    全栈JavaScript之路(七)学习 Comment 类型节点.
    strdup函数的使用方法
    POJ 2823 Sliding Window 【单调队列】
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2078424.html
Copyright © 2020-2023  润新知