Hyper Estraier Node API-Demo
Mein Projekt hat beschlossen,Hyper Estraier als Volltextsuchmaschine zu verwenden. Hier habe ich eine einfache Oberfläche erstellt, um zu demonstrieren, wie Hyper Estraier mit Node API in C programmiert wird.
This program is very simple
1) Bitten Sie den Benutzer, Einfügen (1), Aktualisieren (2), Löschen (3) oder Auflisten (4) vorhandener indizierter
einzugeben. 2) Geben Sie URI ein (eindeutig ID) und URL für indiziert
How to compile - Bitte ändern Sie entsprechend Ihrem Bibliothekspfad
gcc -o HyperIndex HyperIndex.c -L/usr/local/lib -lestraier -lresolv -lnsl -lpthread -lqdbm -lz -liconv -lm -lc
Node URL - Hier habe ich meine Knoten-URL fest codiert
http://localhost:1978/node/pattern
P.S i am not expert in c, please correct me if i am code something wrong.
Program Explanation
——————————–
Bitte beziehen Sie sich immer aufHyper Estraier Node
API reference here
1) Insert or Update Node by using est_node_put_doc()
Wenn der URI identisch ist, werden vorhandene Knotendetails aktualisiert / überschrieben
static void putNode(ESTDOC *doc ,ESTNODE *node, char *cBufferUri ,char *cBufferUrl) { /* add attributes to the document object */ est_doc_add_attr(doc, "@uri", cBufferUri); est_doc_add_attr(doc, "@title", cBufferUri); est_doc_add_attr(doc, "url", cBufferUrl);//for include function /* add the body text to the document object */ est_doc_add_text(doc, cBufferUrl); /* register the document object to the node */ if(!est_node_put_doc(node, doc)){ fprintf(stderr, "error: %d\n", est_node_status(node)); } printf("\n URL ID : %s Added/Updated \n", cBufferUri); }
2) Löschen Sie den Knoten mit est_node_out_doc_by_uri ()
static void outNode(ESTDOC *doc ,ESTNODE *node, char *cBufferUri) { if(!est_node_out_doc_by_uri(node, cBufferUri)){ fprintf(stderr, "error: %d\n", est_node_status(node)); } printf("\n URL ID : %s Deleted\n", cBufferUri); }
3) Zeigen Sie den Knoten mit est_node_get_doc_attr_by_uri () an
static void listNode(ESTDOC *doc ,ESTNODE *node, char *cBufferUri) { char *pUrl; if(!(pUrl = est_node_get_doc_attr_by_uri(node, cBufferUri,"url"))){ fprintf(stderr, "error: %d\n", est_node_status(node)); } printf("\n URL ID : %s\n", cBufferUri); printf(" URL Value : %s\n", pUrl); pUrl=NULL; }
Hier ist der vollständige Quellcode
/* * HyperIndex.c * * Simple Interface For Hyper Estraier * * gcc -o HyperIndex HyperIndex.c -L/usr/local/lib -lestraier -lresolv -lnsl -lpthread -lqdbm -lz -liconv -lm -lc * */ #include #include #include #include #include #include #include static void putNode(ESTDOC *doc ,ESTNODE *node, char *cBufferUri ,char *cBufferUrl) { /* add attributes to the document object */ est_doc_add_attr(doc, "@uri", cBufferUri); est_doc_add_attr(doc, "@title", cBufferUri); est_doc_add_attr(doc, "url", cBufferUrl);//for include function /* add the body text to the document object */ est_doc_add_text(doc, cBufferUrl); /* register the document object to the node */ if(!est_node_put_doc(node, doc)){ fprintf(stderr, "error: %d\n", est_node_status(node)); } printf("\n URL ID : %s Added/Updated \n", cBufferUri); } static void listNode(ESTDOC *doc ,ESTNODE *node, char *cBufferUri) { char *pUrl; if(!(pUrl = est_node_get_doc_attr_by_uri(node, cBufferUri,"url"))){ fprintf(stderr, "error: %d\n", est_node_status(node)); } printf("\n URL ID : %s\n", cBufferUri); printf(" URL Value : %s\n", pUrl); pUrl=NULL; } static void outNode(ESTDOC *doc ,ESTNODE *node, char *cBufferUri) { if(!est_node_out_doc_by_uri(node, cBufferUri)){ fprintf(stderr, "error: %d\n", est_node_status(node)); } printf("\n URL ID : %s Deleted\n", cBufferUri); } int main(int argc, char **argv) { //calculate program time elapsed time_t start, stop; clock_t ticks; long count; //Get user input char cBufferFlag[1]; char cBufferUri[256]; char cBufferUrl[256]; //start time time(&start); //ESTDOC *est_node_get_doc_by_uri(ESTNODE *node, const char *uri); ESTNODE *node; ESTDOC *doc; /* initialize the network environment */ if(!est_init_net_env()){ fprintf(stderr, "\nerror: network is unavailable\n"); return 1; } /* create and configure the node connection object */ node = est_node_new("http://localhost:1978/node/pattern"); est_node_set_auth(node, "admin", "admin"); /* create a document object */ doc = est_doc_new(); printf("\n 1=Insert 2=Update 3=Delete 4=List"); printf("\n Please Enter Opereation : "); scanf("%s",cBufferFlag); if(!strcmp(cBufferFlag, "1") || !strcmp(cBufferFlag, "2")) { printf(" Please Enter URL ID : "); scanf("%s",cBufferUri); printf(" Please Enter URL : "); scanf("%s",cBufferUrl); //insert / update putNode(doc,node,cBufferUri,cBufferUrl); } else if(!strcmp(cBufferFlag, "3")) { printf(" Please Enter URL ID : "); scanf("%s",cBufferUri); //delete url info outNode(doc,node,cBufferUri); } else if(!strcmp(cBufferFlag, "4")) { printf(" Please Enter URL ID : "); scanf("%s",cBufferUri); //list url info listNode(doc,node,cBufferUri); } else { exit(1); } /* destroy the document object */ est_doc_delete(doc); /* destroy the node object */ est_node_delete(node); /* free the networking environment */ est_free_net_env(); //stop time time(&stop); printf("\nFinished in about %.0f seconds. \n\n", difftime(stop, start)); return 0; }