on a register type basis. i.e. w,p, in default.idx. Bug #616.
-/* $Id: zebramap.h,v 1.6 2006-05-10 08:13:20 adam Exp $
- Copyright (C) 1995-2005
+/* $Id: zebramap.h,v 1.7 2006-06-22 09:48:08 adam Exp $
+ Copyright (C) 1995-2006
Index Data ApS
This file is part of the Zebra server.
Index Data ApS
This file is part of the Zebra server.
int zebra_maps_is_sort (ZebraMaps zms, unsigned reg_id);
YAZ_EXPORT
int zebra_maps_is_sort (ZebraMaps zms, unsigned reg_id);
YAZ_EXPORT
+int zebra_maps_is_alwaysmatches (ZebraMaps zms, unsigned reg_id);
+
+YAZ_EXPORT
int zebra_maps_is_positioned (ZebraMaps zms, unsigned reg_id);
YAZ_EXPORT
int zebra_maps_is_positioned (ZebraMaps zms, unsigned reg_id);
YAZ_EXPORT
-/* $Id: extract.c,v 1.221 2006-06-13 19:40:18 adam Exp $
+/* $Id: extract.c,v 1.222 2006-06-22 09:48:08 adam Exp $
Copyright (C) 1995-2006
Index Data ApS
Copyright (C) 1995-2006
Index Data ApS
if (zebra_maps_is_sort (p->zebra_maps, p->index_type))
extract_add_sort_string (p, string, length);
else
if (zebra_maps_is_sort (p->zebra_maps, p->index_type))
extract_add_sort_string (p, string, length);
else
- extract_add_index_string (p, string, length);
+ {
+ extract_add_index_string(p, string, length);
+ if (zebra_maps_is_alwaysmatches(p->zebra_maps, p->index_type))
+ {
+ RecWord word;
+ memcpy(&word, p, sizeof(word));
+
+ word.seqno = 1;
+ extract_add_index_string (&word, "", 0);
+ }
+ }
}
static void extract_add_incomplete_field (RecWord *p)
}
static void extract_add_incomplete_field (RecWord *p)
# Zebra indexes as referred to from the *.abs-files.
# Zebra indexes as referred to from the *.abs-files.
-# $Id: default.idx,v 1.12 2004-09-16 14:01:05 adam Exp $
+# $Id: default.idx,v 1.13 2006-06-22 09:48:09 adam Exp $
#
# Traditional word index
#
# Traditional word index
index w
completeness 0
position 1
index w
completeness 0
position 1
charmap string.chr
# Phrase index
charmap string.chr
# Phrase index
-/* $Id: zebramap.c,v 1.49 2006-05-19 13:49:38 adam Exp $
+/* $Id: zebramap.c,v 1.50 2006-06-22 09:48:09 adam Exp $
Copyright (C) 1995-2006
Index Data ApS
Copyright (C) 1995-2006
Index Data ApS
unsigned reg_id;
int completeness;
int positioned;
unsigned reg_id;
int completeness;
int positioned;
int type;
union {
struct {
int type;
union {
struct {
char *argv[10];
int argc;
int lineno = 0;
char *argv[10];
int argc;
int lineno = 0;
struct zebra_map **zm = 0, *zp;
if (!(f = yaz_fopen(zms->tabpath, fname, "r", zms->tabroot)))
struct zebra_map **zm = 0, *zp;
if (!(f = yaz_fopen(zms->tabpath, fname, "r", zms->tabroot)))
}
while ((argc = readconf_line(f, &lineno, line, 512, argv, 10)))
{
}
while ((argc = readconf_line(f, &lineno, line, 512, argv, 10)))
{
- if (!yaz_matchstr(argv[0], "index") && argc == 2)
+ if (argc == 1)
+ {
+ yaz_log(YLOG_WARN, "%s:%d: Missing arguments for '%s'",
+ fname, lineno, argv[0]);
+ failures++;
+ break;
+ }
+ if (argc > 2)
+ {
+ yaz_log(YLOG_WARN, "%s:%d: Too many arguments for '%s'",
+ fname, lineno, argv[0]);
+ failures++;
+ break;
+ }
+ if (!yaz_matchstr(argv[0], "index"))
{
if (!zm)
zm = &zms->map_list;
{
if (!zm)
zm = &zms->map_list;
(*zm)->type = ZEBRA_MAP_TYPE_INDEX;
(*zm)->completeness = 0;
(*zm)->positioned = 1;
(*zm)->type = ZEBRA_MAP_TYPE_INDEX;
(*zm)->completeness = 0;
(*zm)->positioned = 1;
+ (*zm)->alwaysmatches = 0;
- else if (!yaz_matchstr(argv[0], "sort") && argc == 2)
+ else if (!yaz_matchstr(argv[0], "sort"))
{
if (!zm)
zm = &zms->map_list;
{
if (!zm)
zm = &zms->map_list;
(*zm)->maptab = NULL;
(*zm)->completeness = 0;
(*zm)->positioned = 0;
(*zm)->maptab = NULL;
(*zm)->completeness = 0;
(*zm)->positioned = 0;
+ (*zm)->alwaysmatches = 0;
- else if (zm && !yaz_matchstr(argv[0], "charmap") && argc == 2)
+ else if (!zm)
+ {
+ yaz_log(YLOG_WARN, "%s:%d: Missing sort/index before '%s'",
+ fname, lineno, argv[0]);
+ failures++;
+ }
+ else if (!yaz_matchstr(argv[0], "charmap") && argc == 2)
{
(*zm)->maptab_name = nmem_strdup(zms->nmem, argv[1]);
}
{
(*zm)->maptab_name = nmem_strdup(zms->nmem, argv[1]);
}
- else if (zm && !yaz_matchstr(argv[0], "completeness") && argc == 2)
+ else if (!yaz_matchstr(argv[0], "completeness") && argc == 2)
{
(*zm)->completeness = atoi(argv[1]);
}
{
(*zm)->completeness = atoi(argv[1]);
}
- else if (zm && !yaz_matchstr(argv[0], "position") && argc == 2)
+ else if (!yaz_matchstr(argv[0], "position") && argc == 2)
{
(*zm)->positioned = atoi(argv[1]);
}
{
(*zm)->positioned = atoi(argv[1]);
}
- else if (zm && !yaz_matchstr(argv[0], "entrysize") && argc == 2)
+ else if (!yaz_matchstr(argv[0], "alwaysmatches") && argc == 2)
+ {
+ (*zm)->alwaysmatches = atoi(argv[1]);
+ }
+ else if (!yaz_matchstr(argv[0], "entrysize") && argc == 2)
{
if ((*zm)->type == ZEBRA_MAP_TYPE_SORT)
(*zm)->u.sort.entry_size = atoi(argv[1]);
}
{
if ((*zm)->type == ZEBRA_MAP_TYPE_SORT)
(*zm)->u.sort.entry_size = atoi(argv[1]);
}
+ else
+ {
+ yaz_log(YLOG_WARN, "%s:%d: Unrecognized directive '%s'",
+ fname, lineno, argv[0]);
+ failures++;
+ }
}
if (zm)
(*zm)->next = NULL;
}
if (zm)
(*zm)->next = NULL;
for (zp = zms->map_list; zp; zp = zp->next)
zms->lookup_array[zp->reg_id] = zp;
for (zp = zms->map_list; zp; zp = zp->next)
zms->lookup_array[zp->reg_id] = zp;
+ if (failures)
+ return ZEBRA_FAIL;
/* ------------------------------------ */
int zebra_maps_is_complete(ZebraMaps zms, unsigned reg_id)
/* ------------------------------------ */
int zebra_maps_is_complete(ZebraMaps zms, unsigned reg_id)
+int zebra_maps_is_alwaysmatches(ZebraMaps zms, unsigned reg_id)
+{
+ struct zebra_map *zm = zebra_map_get(zms, reg_id);
+ if (zm)
+ return zm->alwaysmatches;
+ return 0;
+}
+
int zebra_maps_sort(ZebraMaps zms, Z_SortAttributes *sortAttributes,
int *numerical)
{
int zebra_maps_sort(ZebraMaps zms, Z_SortAttributes *sortAttributes,
int *numerical)
{