projects
/
idzebra-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of ssh://git.indexdata.com/home/git/pub/idzebra
[idzebra-moved-to-github.git]
/
index
/
mod_dom.c
diff --git
a/index/mod_dom.c
b/index/mod_dom.c
index
4393ded
..
3340ec4
100644
(file)
--- a/
index/mod_dom.c
+++ b/
index/mod_dom.c
@@
-1,5
+1,5
@@
/* This file is part of the Zebra server.
/* This file is part of the Zebra server.
- Copyright (C) 1995-2008 Index Data
+ Copyright (C) 1994-2009 Index Data
Zebra is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Zebra is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
@@
-338,7
+338,7
@@
static ZEBRA_RES parse_convert(struct filter_info *tinfo, xmlNodePtr ptr,
*l = p;
l = &p->next;
}
*l = p;
l = &p->next;
}
- else if (!XML_STRCMP(ptr->name, "meta"))
+ else if (!XML_STRCMP(ptr->name, "process-meta"))
{
struct _xmlAttr *attr;
struct convert_s *p = nmem_malloc(tinfo->nmem_config, sizeof(*p));
{
struct _xmlAttr *attr;
struct convert_s *p = nmem_malloc(tinfo->nmem_config, sizeof(*p));
@@
-376,13
+376,12
@@
static int process_meta(struct filter_info *tinfo, xmlDocPtr doc, xmlNodePtr nod
struct _xmlAttr *attr;
for (attr = node->properties; attr; attr = attr->next)
{
struct _xmlAttr *attr;
for (attr = node->properties; attr; attr = attr->next)
{
- if (attr_content(attr, "element_set_name", &element_set_name))
+ if (attr_content(attr, "name", &element_set_name))
;
else
{
dom_log(YLOG_WARN, tinfo, node,
;
else
{
dom_log(YLOG_WARN, tinfo, node,
- "bad attribute @%s, expected @element_set_name",
- attr->name);
+ "bad attribute @%s, expected @name", attr->name);
}
}
if (element_set_name)
}
}
if (element_set_name)
@@
-400,11
+399,11
@@
static int process_meta(struct filter_info *tinfo, xmlDocPtr doc, xmlNodePtr nod
if (ret == 0)
{
xmlDocPtr sub_doc =
if (ret == 0)
{
xmlDocPtr sub_doc =
- xmlParseMemory( wrbuf_buf(result), wrbuf_len(result));
+ xmlParseMemory(wrbuf_buf(result), wrbuf_len(result));
if (sub_doc)
{
xmlNodePtr t = xmlDocGetRootElement(sub_doc);
if (sub_doc)
{
xmlNodePtr t = xmlDocGetRootElement(sub_doc);
- xmlAddChild(node, xmlCopyNode(t, 1));
+ xmlReplaceNode(node, xmlCopyNode(t, 1));
xmlFreeDoc(sub_doc);
}
}
xmlFreeDoc(sub_doc);
}
}
@@
-814,10
+813,18
@@
static void index_value_of(struct filter_info *tinfo,
{
xmlChar *text = xmlNodeGetContent(node);
size_t text_len = strlen((const char *)text);
{
xmlChar *text = xmlNodeGetContent(node);
size_t text_len = strlen((const char *)text);
-
+
/* if there is no text, we do not need to proceed */
if (text_len)
{
/* if there is no text, we do not need to proceed */
if (text_len)
{
+ /* keep seqno base so that all text will have
+ identical seqno's for multiple fields , e.g
+ <z:index name="title:w any:w title:p">.. */
+
+ zint seqno_base = recword->seqno;
+ zint seqno_max = recword->seqno;
+
+
const char *look = index_p;
const char *bval;
const char *eval;
const char *look = index_p;
const char *bval;
const char *eval;
@@
-865,6
+872,7
@@
static void index_value_of(struct filter_info *tinfo,
/* actually indexing the text given */
/* actually indexing the text given */
+ recword->seqno = seqno_base;
recword->index_name = (const char *)index;
if (*type)
recword->index_type = (const char *) type;
recword->index_name = (const char *)index;
if (*type)
recword->index_type = (const char *) type;
@@
-879,12
+887,16
@@
static void index_value_of(struct filter_info *tinfo,
(extctr->tokenAdd)(recword);
(extctr->tokenAdd)(recword);
+ if (seqno_max < recword->seqno)
+ seqno_max = recword->seqno;
+
/* eat whitespaces */
if (*look && ' ' == *look)
{
look++;
}
}
/* eat whitespaces */
if (*look && ' ' == *look)
{
look++;
}
}
+ recword->seqno = seqno_max;
}
xmlFree(text);
}
}
xmlFree(text);
}
@@
-1167,15
+1179,13
@@
static int convert_extract_doc(struct filter_info *tinfo,
{
xmlChar *buf_out;
int len_out;
{
xmlChar *buf_out;
int len_out;
+ xmlDocDumpMemory(doc, &buf_out, &len_out);
#if 0
FILE *outf = fopen("extract.xml", "w");
#if 0
FILE *outf = fopen("extract.xml", "w");
- xmlDocDumpMemory(doc, &buf_out, &len_out);
fwrite(buf_out, 1, len_out, outf);
fwrite(buf_out, 1, len_out, outf);
-#endif
- yaz_log(YLOG_LOG, "Extract Doc: %.*s", len_out, buf_out);
-#if 0
fclose(outf);
#endif
fclose(outf);
#endif
+ yaz_log(YLOG_LOG, "Extract Doc: %.*s", len_out, buf_out);
}
if (p->setStoreData)
}
if (p->setStoreData)
@@
-1408,7
+1418,8
@@
static int filter_extract(void *clientData, struct recExtractCtrl *p)
static int ioread_ret(void *context, char *buffer, int len)
{
struct recRetrieveCtrl *p = context;
static int ioread_ret(void *context, char *buffer, int len)
{
struct recRetrieveCtrl *p = context;
- return p->stream->readf(p->stream, buffer, len);
+ int r = p->stream->readf(p->stream, buffer, len);
+ return r;
}
static int ioclose_ret(void *context)
}
static int ioclose_ret(void *context)
@@
-1553,6
+1564,7
@@
idzebra_filter
/*
* Local variables:
* c-basic-offset: 4
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab