/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2011 Index Data
+ * Copyright (C) 1995-2013 Index Data
* See the file LICENSE for details.
*/
/**
}
}
if (server_choice)
- return "solr.serverChoice";
+ return "cql.serverChoice";
return 0;
}
switch (*relation)
{
/* Unsure on whether this is the relation attribute constants? */
- case Z_ProximityOperator_Prox_lessThan:
+ case Z_ProximityOperator_Prox_lessThan:
return 0;
- case Z_ProximityOperator_Prox_lessThanOrEqual:
+ case Z_ProximityOperator_Prox_lessThanOrEqual:
return 0;
- case Z_ProximityOperator_Prox_equal:
+ case Z_ProximityOperator_Prox_equal:
return ":";
- case Z_ProximityOperator_Prox_greaterThanOrEqual:
+ case Z_ProximityOperator_Prox_greaterThanOrEqual:
return 0;
- case Z_ProximityOperator_Prox_greaterThan:
+ case Z_ProximityOperator_Prox_greaterThan:
return 0;
- case Z_ProximityOperator_Prox_notEqual:
+ case Z_ProximityOperator_Prox_notEqual:
return 0;
- case 100:
+ case 100:
/* phonetic is not implemented*/
- return 0;
- case 101:
+ return 0;
+ case 101:
/* stem is not not implemented */
- return 0;
- case 102:
+ return 0;
+ case 102:
/* relevance is supported in SOLR, but not implemented yet */
- return 0;
+ return 0;
default:
/* Invalid relation */
return 0;
}
static int rpn2solr_attr(solr_transform_t ct,
- Z_AttributeList *attributes, WRBUF w)
+ Z_AttributeList *attributes, WRBUF w, char **close_range)
{
const char *relation = solr_lookup_reverse(ct, "relation.", attributes);
const char *index = solr_lookup_reverse(ct, "index.", attributes);
index = lookup_index_from_string_attr(attributes);
/* Attempt to fix bug #2978: Look for a relation attribute */
- if (!relation)
+ if (!relation)
relation = lookup_relation_index_from_attr(attributes);
if (!index)
{
- solr_transform_set_error(ct,
- YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, 0);
+ solr_transform_set_error(ct, YAZ_BIB1_UNSUPP_USE_ATTRIBUTE, 0);
return -1;
}
/* for serverChoice we omit index+relation+structure */
- if (strcmp(index, "solr.serverChoice"))
+ if (strcmp(index, "cql.serverChoice"))
{
wrbuf_puts(w, index);
if (relation)
else if (!strcmp(relation, "eq"))
relation = ":";
else if (!strcmp(relation, "le")) {
- /* TODO Not support as such, but could perhaps be transformed into a range
- relation = ":[ * to ";
- close_range = "]"
- */
+ /* TODO Not support as such, but could perhaps be transformed into a range */
+ relation = ":[* TO ";
+ *close_range = "]";
}
else if (!strcmp(relation, "ge")) {
- /* TODO Not support as such, but could perhaps be transformed into a range
- relation = "[";
- relation = ":[ * to ";
- close_range = "]"
- */
+ /* TODO Not support as such, but could perhaps be transformed into a range */
+ relation = ":[";
+ *close_range = " TO *]";
}
/* Missing mapping of not equal, phonetic, stem and relevance */
wrbuf_puts(w, relation);
wrbuf_puts(w, " ");
}
}
+// if (close_range)
+// wrbuf_puts(w, close_range);
}
return 0;
}
const char *sterm = 0;
size_t lterm = 0;
Odr_int trunc = get_truncation(apt);
+ char *close_range = 0;
wrbuf_rewind(w);
- ret = rpn2solr_attr(ct, apt->attributes, w);
+ ret = rpn2solr_attr(ct, apt->attributes, w, &close_range);
if (trunc == 0 || trunc == 1 || trunc == 100 || trunc == 104)
;
i++;
if (strchr(SOLR_SPECIAL, sterm[i]))
wrbuf_putc(w, '\\');
- wrbuf_putc(w, sterm[i]);
+ wrbuf_putc(w, sterm[i]);
}
else if (sterm[i] == '?' && trunc == 104)
{
wrbuf_puts(w, "*");
if (must_quote)
wrbuf_puts(w, "\"");
+ if (close_range)
+ wrbuf_puts(w, close_range);
}
if (ret == 0)
pr(wrbuf_cstr(w), client_data);