comed to the point where I can start testing sorting of records in the recordslist.
[pazpar2-moved-to-github.git] / src / test_relevance.c
1 /* $Id: test_relevance.c,v 1.10 2007-04-25 13:28:55 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, 2);
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, "relevance",
52                            Metadata_sortkey_relevance);
53   
54   conf_service_add_sortkey(nmem, service, 1, "title",
55                            Metadata_sortkey_string);
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   relevance_newrec(rel, cluster);
143
144   cluster 
145       = reclist_insert(list, service, rec_bee_fish, mk_bee_fish, &no_merged);
146   YAZ_CHECK(cluster);
147   relevance_newrec(rel, cluster);
148
149   cluster 
150       = reclist_insert(list, service, rec_fish_bee, mk_fish_bee, &no_merged);
151   YAZ_CHECK(cluster);
152   relevance_newrec(rel, cluster);
153
154   cluster 
155       = reclist_insert(list, service, rec_zebra_bee, mk_zebra_bee, &no_merged);
156   YAZ_CHECK(cluster);
157   relevance_newrec(rel, cluster);
158
159
160   YAZ_CHECK(no_recs == no_merged);
161
162   // now sorting according to sorting criteria, here ascending title
163   struct reclist_sortparms *sort_parms = 0;
164   reclist_sortparms_insert(nmem, &sort_parms, service, "title", 1);
165   //reclist_sortparms_insert(nmem, &sort_parms, service, "relevance", 1);
166
167   // crashes with a fat segmentation fault! To be traced tomorrow
168   //reclist_sort(list, sort_parms);
169   
170   
171
172
173                         
174   //mergekey_norm = (xmlChar *) nmem_strdup(se->nmem, (char*) mergekey);
175   //normalize_mergekey((char *) mergekey_norm, 0);
176
177
178
179
180
181
182   //relevance_prepare_read(rel, list);
183
184
185   //relevance_donerecord(rel, cluster);
186   // relevance_countwords(se->rel, cluster, 
187   //                                   (char *) value, service->metadata->rank);
188   //      
189
190
191   nmem_destroy(nmem);
192
193   //YAZ_CHECK(0 == 0);
194   //YAZ_CHECK_EQ(0, 1);
195 }
196
197
198 int main(int argc, char **argv)
199 {
200     YAZ_CHECK_INIT(argc, argv); 
201     YAZ_CHECK_LOG(); 
202
203
204     test_relevance_7bit(argc, argv); 
205
206     
207     YAZ_CHECK_TERM;
208 }
209
210
211
212
213 /*
214  * Local variables:
215  * c-basic-offset: 4
216  * indent-tabs-mode: nil
217  * End:
218  * vim: shiftwidth=4 tabstop=8 expandtab
219  */