projects
/
pazpar2-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ICU chain "facet" honors YAC ICU element <display/>.
[pazpar2-moved-to-github.git]
/
src
/
session.c
diff --git
a/src/session.c
b/src/session.c
index
405d53b
..
ee39c7b
100644
(file)
--- a/
src/session.c
+++ b/
src/session.c
@@
-86,7
+86,8
@@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
struct parameters global_parameters =
{
0, // dump_records
struct parameters global_parameters =
{
0, // dump_records
- 0 // debug_mode
+ 0, // debug_mode
+ 0, // predictable sessions
};
struct client_list {
};
struct client_list {
@@
-190,20
+191,31
@@
void add_facet(struct session *s, const char *type, const char *value, int count
pp2_relevance_token_t prt;
const char *facet_component;
WRBUF facet_wrbuf = wrbuf_alloc();
pp2_relevance_token_t prt;
const char *facet_component;
WRBUF facet_wrbuf = wrbuf_alloc();
+ WRBUF display_wrbuf = wrbuf_alloc();
prt = pp2_relevance_tokenize(service->facet_pct);
pp2_relevance_first(prt, value, 0);
while ((facet_component = pp2_relevance_token_next(prt)))
{
prt = pp2_relevance_tokenize(service->facet_pct);
pp2_relevance_first(prt, value, 0);
while ((facet_component = pp2_relevance_token_next(prt)))
{
+ const char *display_component;
if (*facet_component)
{
if (wrbuf_len(facet_wrbuf))
wrbuf_puts(facet_wrbuf, " ");
wrbuf_puts(facet_wrbuf, facet_component);
}
if (*facet_component)
{
if (wrbuf_len(facet_wrbuf))
wrbuf_puts(facet_wrbuf, " ");
wrbuf_puts(facet_wrbuf, facet_component);
}
+ display_component = pp2_get_display(prt);
+ if (display_component)
+ {
+ if (wrbuf_len(display_wrbuf))
+ wrbuf_puts(display_wrbuf, " ");
+ wrbuf_puts(display_wrbuf, display_component);
+ }
}
pp2_relevance_token_destroy(prt);
}
pp2_relevance_token_destroy(prt);
-
+
+ yaz_log(YLOG_LOG, "facet norm=%s", wrbuf_cstr(facet_wrbuf));
+ yaz_log(YLOG_LOG, "facet display=%s", wrbuf_cstr(display_wrbuf));
if (wrbuf_len(facet_wrbuf))
{
int i;
if (wrbuf_len(facet_wrbuf))
{
int i;
@@
-228,10
+240,11
@@
void add_facet(struct session *s, const char *type, const char *value, int count
#if 0
session_log(s, YLOG_DEBUG, "Facets for %s: %s norm:%s (%d)", type, value, wrbuf_cstr(facet_wrbuf), count);
#endif
#if 0
session_log(s, YLOG_DEBUG, "Facets for %s: %s norm:%s (%d)", type, value, wrbuf_cstr(facet_wrbuf), count);
#endif
- termlist_insert(s->termlists[i].termlist, wrbuf_cstr(facet_wrbuf),
- count);
+ termlist_insert(s->termlists[i].termlist, wrbuf_cstr(display_wrbuf),
+ wrbuf_cstr(facet_wrbuf), count);
}
wrbuf_destroy(facet_wrbuf);
}
wrbuf_destroy(facet_wrbuf);
+ wrbuf_destroy(display_wrbuf);
}
static xmlDoc *record_to_xml(struct session *se,
}
static xmlDoc *record_to_xml(struct session *se,
@@
-487,7
+500,7
@@
int session_set_watch(struct session *s, int what,
ret = 0;
}
session_leave(s);
ret = 0;
}
session_leave(s);
- return 0;
+ return ret;
}
void session_alert_watch(struct session *s, int what)
}
void session_alert_watch(struct session *s, int what)
@@
-589,12
+602,11
@@
int session_is_preferred_clients_ready(struct session *s)
return res == 0;
}
return res == 0;
}
-
-
enum pazpar2_error_code search(struct session *se,
const char *query,
const char *startrecs, const char *maxrecs,
const char *filter,
enum pazpar2_error_code search(struct session *se,
const char *query,
const char *startrecs, const char *maxrecs,
const char *filter,
+ const char *limit,
const char **addinfo)
{
int live_channels = 0;
const char **addinfo)
{
int live_channels = 0;
@@
-602,6
+614,7
@@
enum pazpar2_error_code search(struct session *se,
int no_failed = 0;
struct client_list *l;
struct timeval tval;
int no_failed = 0;
struct client_list *l;
struct timeval tval;
+ facet_limits_t facet_limits;
session_log(se, YLOG_DEBUG, "Search");
session_log(se, YLOG_DEBUG, "Search");
@@
-628,6
+641,13
@@
enum pazpar2_error_code search(struct session *se,
tval.tv_sec += 5;
tval.tv_sec += 5;
+ facet_limits = facet_limits_create(limit);
+ if (!facet_limits)
+ {
+ *addinfo = "limit";
+ session_leave(se);
+ return PAZPAR2_MALFORMED_PARAMETER_VALUE;
+ }
for (l = se->clients; l; l = l->next)
{
struct client *cl = l->client;
for (l = se->clients; l; l = l->next)
{
struct client *cl = l->client;
@@
-638,7
+658,7
@@
enum pazpar2_error_code search(struct session *se,
client_set_startrecs(cl, atoi(startrecs));
if (prepare_session_database(se, client_get_database(cl)) < 0)
;
client_set_startrecs(cl, atoi(startrecs));
if (prepare_session_database(se, client_get_database(cl)) < 0)
;
- else if (client_parse_query(cl, query) < 0)
+ else if (client_parse_query(cl, query, facet_limits) < 0)
no_failed++;
else
{
no_failed++;
else
{
@@
-650,6
+670,7
@@
enum pazpar2_error_code search(struct session *se,
client_start_search(cl);
}
}
client_start_search(cl);
}
}
+ facet_limits_destroy(facet_limits);
session_leave(se);
if (no_working == 0)
{
session_leave(se);
if (no_working == 0)
{
@@
-759,12
+780,6
@@
void session_apply_setting(struct session *se, char *dbname, char *setting,
}
}
}
}
-/* Depreciated: use session_destroy */
-void destroy_session(struct session *se)
-{
- session_destroy(se);
-}
-
void session_destroy(struct session *se) {
struct session_database *sdb;
session_log(se, YLOG_DEBUG, "Destroying");
void session_destroy(struct session *se) {
struct session_database *sdb;
session_log(se, YLOG_DEBUG, "Destroying");
@@
-779,10
+794,13
@@
void session_destroy(struct session *se) {
nmem_destroy(se->nmem);
service_destroy(se->service);
yaz_mutex_destroy(&se->session_mutex);
nmem_destroy(se->nmem);
service_destroy(se->service);
yaz_mutex_destroy(&se->session_mutex);
- wrbuf_destroy(se->wrbuf);
-
}
}
+/* Depreciated: use session_destroy */
+void destroy_session(struct session *se)
+{
+ session_destroy(se);
+}
size_t session_get_memory_status(struct session *session) {
size_t session_nmem;
size_t session_get_memory_status(struct session *session) {
size_t session_nmem;
@@
-818,7
+836,6
@@
struct session *new_session(NMEM nmem, struct conf_service *service,
session->clients = 0;
session->session_nmem = nmem;
session->nmem = nmem_create();
session->clients = 0;
session->session_nmem = nmem;
session->nmem = nmem_create();
- session->wrbuf = wrbuf_alloc();
session->databases = 0;
for (i = 0; i <= SESSION_WATCH_MAX; i++)
{
session->databases = 0;
for (i = 0; i <= SESSION_WATCH_MAX; i++)
{
@@
-859,14
+876,16
@@
struct hitsbytarget *hitsbytarget(struct session *se, int *count, NMEM nmem)
res[*count].state = client_get_state_str(cl);
res[*count].connected = client_get_connection(cl) ? 1 : 0;
session_settings_dump(se, client_get_database(cl), w);
res[*count].state = client_get_state_str(cl);
res[*count].connected = client_get_connection(cl) ? 1 : 0;
session_settings_dump(se, client_get_database(cl), w);
- res[*count].settings_xml = w;
+ res[*count].settings_xml = nmem_strdup(nmem, wrbuf_cstr(w));
+ wrbuf_destroy(w);
(*count)++;
}
session_leave(se);
return res;
}
(*count)++;
}
session_leave(se);
return res;
}
-struct termlist_score **termlist(struct session *se, const char *name, int *num)
+struct termlist_score **get_termlist_score(struct session *se,
+ const char *name, int *num)
{
int i;
struct termlist_score **tl = 0;
{
int i;
struct termlist_score **tl = 0;
@@
-1503,7
+1522,6
@@
static int ingest_to_cluster(struct client *cl,
// construct facets ... unless the client already has reported them
if (ser_md->termlist && !client_has_facet(cl, (char *) type))
{
// construct facets ... unless the client already has reported them
if (ser_md->termlist && !client_has_facet(cl, (char *) type))
{
-
if (ser_md->type == Metadata_type_year)
{
char year[64];
if (ser_md->type == Metadata_type_year)
{
char year[64];