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;
}
