added setting sortkey on clusters, needs still nice wrapping in cluster interfaces
[pazpar2-moved-to-github.git] / src / test_relevance.c
1 /* $Id: test_relevance.c,v 1.12 2007-04-26 21:31:05 marc Exp $
2    Copyright (c) 2006-2007, Index Data.
3
4 This file is part of Pazpar2.
5
6 Pazpar2 is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 2, or (at your option) any later
9 version.
10
11 Pazpar2 is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with Pazpar2; see the file LICENSE.  If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19 02111-1307, USA.
20  */
21
22 #if HAVE_CONFIG_H
23 #include "cconfig.h"
24 #endif
25
26 #define USE_TIMING 0
27 #if USE_TIMING
28 #include <yaz/timing.h>
29 #endif
30
31 #include <yaz/test.h>
32
33
34 #include "config.h"
35 #include "relevance.h"
36 #include "record.h"
37 #include "reclists.h"
38
39
40 void test_relevance_7bit(int argc, char **argv)
41 {
42   NMEM  nmem = nmem_create();
43
44   struct conf_service *service = 0; 
45   service =  conf_service_create(nmem, 1, 1);
46
47   conf_service_add_metadata(nmem, service, 0, "title",
48                             Metadata_type_generic, Metadata_merge_unique,
49                             1, 1, 1, 0);
50   
51   conf_service_add_sortkey(nmem, service, 0, "title",
52                            Metadata_sortkey_string);
53
54   //conf_service_add_sortkey(nmem, service, 1, "relevance",
55   //                         Metadata_sortkey_relevance);
56   
57
58
59
60   // setting up records
61   
62   // why on earth do we have a client dangeling from the record ??
63   // record->client = client;
64
65   union data_types data_ape = {"ape"};
66   union data_types data_bee = {"bee"};
67   union data_types data_fish = {"fish"};
68   union data_types data_zebra = {"zebra"};
69   
70
71   //union data_types data_year;
72   //data_num.number.min = 2005;
73   //data_num.number.max = 2007;
74
75   int no_recs = 4;
76
77   const char *mk_ape_fish = "ape fish";
78   struct record *rec_ape_fish = 0;
79   rec_ape_fish 
80       = record_create(nmem, service->num_metadata, service->num_sortkeys);
81   record_add_metadata(nmem, rec_ape_fish, service, "title", data_ape);
82   //record_assign_sortkey(nmem, rec_ape_fish, service, "relevance", data_ape);
83   record_assign_sortkey(nmem, rec_ape_fish, service, "title", data_ape);
84   record_add_metadata(nmem, rec_ape_fish, service, "title", data_fish);
85   YAZ_CHECK(rec_ape_fish);  
86
87   const char *mk_bee_fish = "bee fish";
88   struct record *rec_bee_fish = 0;
89   rec_bee_fish 
90       = record_create(nmem, service->num_metadata, service->num_sortkeys);
91   record_add_metadata(nmem, rec_bee_fish, service, "title", data_bee);
92   //record_assign_sortkey(nmem, rec_bee_fish, service, "relevance", data_bee);
93   record_assign_sortkey(nmem, rec_bee_fish, service, "title", data_bee);
94   record_add_metadata(nmem, rec_bee_fish, service, "title", data_fish);
95   YAZ_CHECK(rec_bee_fish);
96  
97   const char *mk_fish_bee = "fish bee";
98   struct record *rec_fish_bee = 0;
99   rec_fish_bee 
100       = record_create(nmem, service->num_metadata, service->num_sortkeys);
101   record_add_metadata(nmem, rec_fish_bee, service, "title", data_fish);
102   //record_assign_sortkey(nmem, rec_fish_bee, service, "relevance", data_fish);
103   record_assign_sortkey(nmem, rec_fish_bee, service, "title", data_fish);
104   record_add_metadata(nmem, rec_fish_bee, service, "title", data_bee);
105   YAZ_CHECK(rec_fish_bee);
106   
107   const char *mk_zebra_bee = "zebra bee";
108   struct record *rec_zebra_bee = 0;
109     rec_zebra_bee 
110       = record_create(nmem, service->num_metadata, service->num_sortkeys);
111   record_add_metadata(nmem, rec_zebra_bee, service, "title", data_zebra);
112   //record_assign_sortkey(nmem, rec_zebra_bee, service, "relevance", data_zebra);
113   record_assign_sortkey(nmem, rec_zebra_bee, service, "title", data_zebra);
114   record_add_metadata(nmem, rec_zebra_bee, service, "title", data_bee);
115   YAZ_CHECK(rec_zebra_bee);
116
117   
118   struct reclist *list = 0;
119   list = reclist_create(nmem, no_recs);
120   YAZ_CHECK(list);
121
122   int no_merged = 0;
123
124
125   const char * queryterms[] = 
126       {"ape", "fish", 0};
127   //    {"ål", "økologi", "æble", 0};
128
129
130   //struct relevance *rel = 0;
131   //rel = relevance_create(nmem, queryterms, no_recs);
132   //YAZ_CHECK(rel);
133   
134   struct record_cluster *cluster = 0;
135
136
137   // insert records into recordlist and get clusters 
138   // since metadata keys differ, we get multiple clusters ?? 
139   cluster 
140       = reclist_insert(list, service, rec_ape_fish, mk_ape_fish, &no_merged);
141   YAZ_CHECK(cluster);
142   data_types_assign(nmem, &cluster->sortkeys[0], *rec_ape_fish->sortkeys[0]);
143   //relevance_newrec(rel, cluster);
144
145   cluster 
146       = reclist_insert(list, service, rec_bee_fish, mk_bee_fish, &no_merged);
147   YAZ_CHECK(cluster);
148   data_types_assign(nmem, &cluster->sortkeys[0], *rec_bee_fish->sortkeys[0]);
149   //relevance_newrec(rel, cluster);
150
151   cluster 
152       = reclist_insert(list, service, rec_fish_bee, mk_fish_bee, &no_merged);
153   YAZ_CHECK(cluster);
154   data_types_assign(nmem, &cluster->sortkeys[0], *rec_fish_bee->sortkeys[0]);
155   //relevance_newrec(rel, cluster);
156
157   cluster 
158       = reclist_insert(list, service, rec_zebra_bee, mk_zebra_bee, &no_merged);
159   YAZ_CHECK(cluster);
160   data_types_assign(nmem, &cluster->sortkeys[0], *rec_zebra_bee->sortkeys[0]);
161   //relevance_newrec(rel, cluster);
162
163
164   YAZ_CHECK(no_recs == no_merged);
165
166   // now sorting according to sorting criteria, here ascending title
167   struct reclist_sortparms *sort_parms = 0;
168   reclist_sortparms_insert(nmem, &sort_parms, service, "title", 1);
169   //reclist_sortparms_insert(nmem, &sort_parms, service, "relevance", 1);
170
171   // crashes with a fat segmentation fault! To be traced tomorrow
172   reclist_sort(list, sort_parms);
173   
174
175                         
176   //mergekey_norm = (xmlChar *) nmem_strdup(se->nmem, (char*) mergekey);
177   //normalize_mergekey((char *) mergekey_norm, 0);
178
179
180
181
182
183
184   //relevance_prepare_read(rel, list);
185
186
187   //relevance_donerecord(rel, cluster);
188   // relevance_countwords(se->rel, cluster, 
189   //                                   (char *) value, service->metadata->rank);
190   //      
191
192
193   nmem_destroy(nmem);
194
195   //YAZ_CHECK(0 == 0);
196   //YAZ_CHECK_EQ(0, 1);
197 }
198
199
200 int main(int argc, char **argv)
201 {
202     YAZ_CHECK_INIT(argc, argv); 
203     YAZ_CHECK_LOG(); 
204
205
206     test_relevance_7bit(argc, argv); 
207
208     
209     YAZ_CHECK_TERM;
210 }
211
212
213
214
215 /*
216  * Local variables:
217  * c-basic-offset: 4
218  * indent-tabs-mode: nil
219  * End:
220  * vim: shiftwidth=4 tabstop=8 expandtab
221  */