isomorfeus-ferret 0.13.11 → 0.14.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -3789,10 +3789,6 @@ VALUE frb_get_q(FrtQuery *q) {
3789
3789
  *
3790
3790
  ****************************************************************************/
3791
3791
 
3792
- /* rdochack
3793
- cTopDocs = rb_define_class_under(mSearch, "TopDocs", rb_cObject);
3794
- */
3795
-
3796
3792
  /*
3797
3793
  * Document-class: Ferret::Search::Hit
3798
3794
  *
@@ -3806,9 +3802,6 @@ cTopDocs = rb_define_class_under(mSearch, "TopDocs", rb_cObject);
3806
3802
  */
3807
3803
  static void Init_Hit(void) {
3808
3804
  const char *hit_class = "Hit";
3809
- /* rdochack
3810
- cHit = rb_define_class_under(mSearch, "Hit", rb_cObject);
3811
- */
3812
3805
  cHit = rb_struct_define(hit_class, "doc", "score", NULL);
3813
3806
  rb_set_class_path(cHit, mSearch, hit_class);
3814
3807
  rb_const_set(mSearch, rb_intern(hit_class), cHit);
@@ -3836,9 +3829,6 @@ static void Init_Hit(void) {
3836
3829
  */
3837
3830
  static void Init_TopDocs(void) {
3838
3831
  const char *td_class = "TopDocs";
3839
- /* rdochack
3840
- cTopDocs = rb_define_class_under(mSearch, "TopDocs", rb_cObject);
3841
- */
3842
3832
  cTopDocs = rb_struct_define(td_class,
3843
3833
  "total_hits",
3844
3834
  "hits",
@@ -402,7 +402,7 @@ static VALUE frb_fsdir_new(int argc, VALUE *argv, VALUE klass) {
402
402
  frb_create_dir(rpath);
403
403
  }
404
404
  if (!rb_funcall(rb_cFile, id_is_directory, 1, rpath)) {
405
- rb_raise(rb_eIOError, "No directory <%s> found. Use :create => true to create one.", rs2s(rpath));
405
+ rb_raise(cFileNotFoundError, "No directory <%s> found. Use :create => true to create one.", rs2s(rpath));
406
406
  }
407
407
  store = frt_open_fs_store(rs2s(rpath));
408
408
  if (create) store->clear_all(store);
@@ -58,10 +58,10 @@ typedef struct FrtHash {
58
58
  * used outside of the Hash methods */
59
59
  FrtHashEntry *(*lookup_i)(struct FrtHash *self,
60
60
  register const void *key);
61
- unsigned long (*hash_i)(const void *key);
62
- int (*eq_i)(const void *key1, const void *key2);
63
- void (*free_key_i)(void *p);
64
- void (*free_value_i)(void *p);
61
+ unsigned long (*hash_i)(const void *key);
62
+ int (*eq_i)(const void *key1, const void *key2);
63
+ void (*free_key_i)(void *p);
64
+ void (*free_value_i)(void *p);
65
65
  } FrtHash;
66
66
 
67
67
  /**
@@ -140,8 +140,7 @@ extern FrtHash *frt_h_new(frt_hash_ft hash,
140
140
  * pass NULL in place of this parameter the value will not be destroyed.
141
141
  * @return A newly allocated Hash
142
142
  */
143
- extern FrtHash *frt_h_new_str(frt_free_ft free_key,
144
- frt_free_ft free_value);
143
+ extern FrtHash *frt_h_new_str(frt_free_ft free_key, frt_free_ft free_value);
145
144
 
146
145
  /**
147
146
  * Create a new Hash that uses integers as its keys. The Hash will store all
@@ -258,8 +257,7 @@ extern void *frt_h_rem(FrtHash *self, const void *key, bool del_key);
258
257
  * the existing key so no key was freed
259
258
  * </pre>
260
259
  */
261
- extern FrtHashKeyStatus frt_h_set(FrtHash *self,
262
- const void *key, void *value);
260
+ extern FrtHashKeyStatus frt_h_set(FrtHash *self, const void *key, void *value);
263
261
 
264
262
  /**
265
263
  * Add the value +value+ to the Hash referencing it with key +key+. If
@@ -170,9 +170,9 @@ static char *fn_for_gen_field(char *buf,
170
170
  *
171
171
  ***************************************************************************/
172
172
 
173
- static unsigned long long co_hash(const void *key)
173
+ static unsigned long co_hash(const void *key)
174
174
  {
175
- return (unsigned long long)key;
175
+ return (unsigned long)key;
176
176
  }
177
177
 
178
178
  static int co_eq(const void *key1, const void *key2)
@@ -1163,6 +1163,7 @@ static FrtLazyDocField *lazy_df_new(ID name, const int size, FrtCompressionType
1163
1163
  self->data = FRT_ALLOC_AND_ZERO_N(FrtLazyDocFieldData, size);
1164
1164
  self->compression = compression;
1165
1165
  self->decompressed = false;
1166
+ self->loaded = false;
1166
1167
  return self;
1167
1168
  }
1168
1169
 
@@ -1400,6 +1401,7 @@ char *frt_lazy_df_get_data(FrtLazyDocField *self, int i) {
1400
1401
  frt_is_read_bytes(self->doc->fields_in, (frt_uchar *)text, read_len);
1401
1402
  text[read_len - 1] = '\0';
1402
1403
  }
1404
+ self->loaded = true;
1403
1405
  }
1404
1406
  }
1405
1407
 
@@ -1473,6 +1475,7 @@ static FrtLazyDoc *lazy_doc_new(int size, FrtInStream *fdt_in)
1473
1475
  self->size = size;
1474
1476
  self->fields = FRT_ALLOC_AND_ZERO_N(FrtLazyDocField *, size);
1475
1477
  self->fields_in = frt_is_clone(fdt_in);
1478
+ self->loaded = false;
1476
1479
  return self;
1477
1480
  }
1478
1481
 
@@ -529,7 +529,7 @@ extern FrtTVTerm *frt_tv_get_tv_term(FrtTermVector *tv, const char *term);
529
529
 
530
530
  /* * * FrtLazyDocField * * */
531
531
  typedef struct FrtLazyDocFieldData {
532
- frt_off_t start;
532
+ frt_off_t start;
533
533
  int length;
534
534
  rb_encoding *encoding;
535
535
  FrtCompressionType compression; /* as stored */
@@ -545,6 +545,7 @@ typedef struct FrtLazyDocField {
545
545
  int len; /* length of data elements concatenated */
546
546
  FrtCompressionType compression; /* as configured */
547
547
  bool decompressed;
548
+ bool loaded;
548
549
  } FrtLazyDocField;
549
550
 
550
551
  extern char *frt_lazy_df_get_data(FrtLazyDocField *self, int i);
@@ -556,6 +557,7 @@ struct FrtLazyDoc {
556
557
  int size;
557
558
  FrtLazyDocField **fields;
558
559
  FrtInStream *fields_in;
560
+ bool loaded;
559
561
  };
560
562
 
561
563
  extern void frt_lazy_doc_close(FrtLazyDoc *self);
@@ -29,6 +29,7 @@ VALUE sym_true;
29
29
  VALUE sym_false;
30
30
  VALUE sym_path;
31
31
  VALUE sym_dir;
32
+ VALUE sym_each;
32
33
 
33
34
  /* Modules */
34
35
  VALUE mIsomorfeus;
@@ -272,12 +273,13 @@ void Init_isomorfeus_ferret_ext(void) {
272
273
  id_data = rb_intern("@data");
273
274
 
274
275
  /* Symbols */
275
- sym_yes = ID2SYM(rb_intern("yes"));;
276
- sym_no = ID2SYM(rb_intern("no"));;
277
- sym_true = ID2SYM(rb_intern("true"));;
278
- sym_false = ID2SYM(rb_intern("false"));;
279
- sym_path = ID2SYM(rb_intern("path"));;
280
- sym_dir = ID2SYM(rb_intern("dir"));;
276
+ sym_yes = ID2SYM(rb_intern("yes"));
277
+ sym_no = ID2SYM(rb_intern("no"));
278
+ sym_true = ID2SYM(rb_intern("true"));
279
+ sym_false = ID2SYM(rb_intern("false"));
280
+ sym_path = ID2SYM(rb_intern("path"));
281
+ sym_dir = ID2SYM(rb_intern("dir"));
282
+ sym_each = ID2SYM(rb_intern("each"));
281
283
 
282
284
  mIsomorfeus = rb_define_module("Isomorfeus");
283
285
  mFerret = rb_define_module_under(mIsomorfeus, "Ferret");
@@ -41,12 +41,12 @@ extern VALUE cLockError;
41
41
  extern VALUE cTerm;
42
42
 
43
43
  /* Ferret Inits */
44
- extern void Init_Utils();
45
- extern void Init_Analysis();
46
- extern void Init_Store();
47
- extern void Init_Index();
48
- extern void Init_Search();
49
- extern void Init_QueryParser();
44
+ extern void Init_Utils(void);
45
+ extern void Init_Analysis(void);
46
+ extern void Init_Store(void);
47
+ extern void Init_Index(void);
48
+ extern void Init_Search(void);
49
+ extern void Init_QueryParser(void);
50
50
 
51
51
  extern void frb_raise(int excode, const char *msg);
52
52
  extern void frb_create_dir(VALUE rpath);
@@ -5,6 +5,7 @@ module Isomorfeus
5
5
  # information on how to use this class.
6
6
  class Index
7
7
  include MonitorMixin
8
+ include Enumerable
8
9
  include Isomorfeus::Ferret::Store
9
10
  include Isomorfeus::Ferret::Search
10
11
 
@@ -383,14 +384,11 @@ module Isomorfeus
383
384
  # puts "hit document number #{doc} with a score of #{score}"
384
385
  # end
385
386
  #
386
- def search_each(query, options = {}) # :yield: doc, score
387
+ def search_each(query, options = {}, &block) # :yield: doc, score
387
388
  @dir.synchronize do
388
389
  ensure_searcher_open()
389
390
  query = do_process_query(query)
390
-
391
- @searcher.search_each(query, options) do |doc, score|
392
- yield doc, score
393
- end
391
+ @searcher.search_each(query, options, &block)
394
392
  end
395
393
  end
396
394
 
@@ -485,15 +483,11 @@ module Isomorfeus
485
483
  end
486
484
  end
487
485
 
488
- # iterate through all documents in the index. This method preloads the
489
- # documents so you don't need to call #load on the document to load all the
490
- # fields.
491
- def each
486
+ # iterate through all documents in the index.
487
+ def each(&block)
492
488
  @dir.synchronize do
493
489
  ensure_reader_open
494
- (0...@reader.max_doc).each do |i|
495
- yield @reader[i].load unless @reader.deleted?(i)
496
- end
490
+ @reader.each(&block)
497
491
  end
498
492
  end
499
493
 
@@ -679,7 +673,7 @@ module Isomorfeus
679
673
  docs_to_add = []
680
674
  query = do_process_query(query)
681
675
  @searcher.search_each(query, :limit => :all) do |id, score|
682
- document = @searcher[id].load
676
+ document = @searcher[id].to_h
683
677
  if new_val.is_a?(Hash)
684
678
  document.merge!(new_val)
685
679
  else new_val.is_a?(String) or new_val.is_a?(Symbol)
@@ -850,6 +844,12 @@ module Isomorfeus
850
844
  end
851
845
  end
852
846
 
847
+ def to_enum
848
+ @dir.synchronize do
849
+ ensure_reader_open
850
+ @reader.to_enum
851
+ end
852
+ end
853
853
 
854
854
  protected
855
855
  def ensure_writer_open()
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Ferret
3
- VERSION = '0.13.11'
3
+ VERSION = '0.14.1'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-ferret
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.11
4
+ version: 0.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-20 00:00:00.000000000 Z
11
+ date: 2022-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -180,7 +180,9 @@ files:
180
180
  - ext/isomorfeus_ferret_ext/extconf.rb
181
181
  - ext/isomorfeus_ferret_ext/fio_tmpfile.h
182
182
  - ext/isomorfeus_ferret_ext/frb_analysis.c
183
+ - ext/isomorfeus_ferret_ext/frb_field_info.c
183
184
  - ext/isomorfeus_ferret_ext/frb_index.c
185
+ - ext/isomorfeus_ferret_ext/frb_lazy_doc.c
184
186
  - ext/isomorfeus_ferret_ext/frb_qparser.c
185
187
  - ext/isomorfeus_ferret_ext/frb_search.c
186
188
  - ext/isomorfeus_ferret_ext/frb_store.c