ferret 0.9.6 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. data/MIT-LICENSE +1 -1
  2. data/README +12 -24
  3. data/Rakefile +38 -54
  4. data/TODO +14 -17
  5. data/ext/analysis.c +982 -823
  6. data/ext/analysis.h +133 -76
  7. data/ext/array.c +96 -58
  8. data/ext/array.h +40 -13
  9. data/ext/bitvector.c +476 -118
  10. data/ext/bitvector.h +264 -22
  11. data/ext/compound_io.c +217 -229
  12. data/ext/defines.h +49 -0
  13. data/ext/document.c +107 -317
  14. data/ext/document.h +31 -65
  15. data/ext/except.c +81 -36
  16. data/ext/except.h +117 -55
  17. data/ext/extconf.rb +2 -9
  18. data/ext/ferret.c +211 -104
  19. data/ext/ferret.h +22 -11
  20. data/ext/filter.c +97 -82
  21. data/ext/fs_store.c +348 -367
  22. data/ext/global.c +226 -188
  23. data/ext/global.h +44 -26
  24. data/ext/hash.c +474 -391
  25. data/ext/hash.h +441 -68
  26. data/ext/hashset.c +124 -96
  27. data/ext/hashset.h +169 -20
  28. data/ext/helper.c +56 -5
  29. data/ext/helper.h +7 -0
  30. data/ext/inc/lang.h +29 -49
  31. data/ext/inc/threading.h +31 -0
  32. data/ext/ind.c +288 -278
  33. data/ext/ind.h +68 -0
  34. data/ext/index.c +5688 -0
  35. data/ext/index.h +663 -616
  36. data/ext/lang.h +29 -49
  37. data/ext/libstemmer.c +3 -3
  38. data/ext/mem_pool.c +84 -0
  39. data/ext/mem_pool.h +35 -0
  40. data/ext/posh.c +1006 -0
  41. data/ext/posh.h +1007 -0
  42. data/ext/priorityqueue.c +117 -194
  43. data/ext/priorityqueue.h +135 -39
  44. data/ext/q_boolean.c +1305 -1108
  45. data/ext/q_const_score.c +106 -93
  46. data/ext/q_filtered_query.c +138 -135
  47. data/ext/q_fuzzy.c +206 -242
  48. data/ext/q_match_all.c +94 -80
  49. data/ext/q_multi_term.c +663 -0
  50. data/ext/q_parser.c +667 -593
  51. data/ext/q_phrase.c +992 -555
  52. data/ext/q_prefix.c +72 -61
  53. data/ext/q_range.c +235 -210
  54. data/ext/q_span.c +1480 -1166
  55. data/ext/q_term.c +273 -246
  56. data/ext/q_wildcard.c +127 -114
  57. data/ext/r_analysis.c +1720 -711
  58. data/ext/r_index.c +3049 -0
  59. data/ext/r_qparser.c +433 -146
  60. data/ext/r_search.c +2934 -1993
  61. data/ext/r_store.c +372 -143
  62. data/ext/r_utils.c +941 -0
  63. data/ext/ram_store.c +330 -326
  64. data/ext/search.c +1291 -668
  65. data/ext/search.h +403 -702
  66. data/ext/similarity.c +91 -113
  67. data/ext/similarity.h +45 -30
  68. data/ext/sort.c +721 -484
  69. data/ext/stopwords.c +361 -273
  70. data/ext/store.c +556 -58
  71. data/ext/store.h +706 -126
  72. data/ext/tags +3578 -2780
  73. data/ext/term_vectors.c +352 -0
  74. data/ext/threading.h +31 -0
  75. data/ext/win32.h +54 -0
  76. data/lib/ferret.rb +5 -17
  77. data/lib/ferret/document.rb +130 -2
  78. data/lib/ferret/index.rb +577 -26
  79. data/lib/ferret/number_tools.rb +157 -0
  80. data/lib/ferret_version.rb +3 -0
  81. data/test/test_helper.rb +5 -13
  82. data/test/unit/analysis/tc_analyzer.rb +513 -1
  83. data/test/unit/analysis/{ctc_tokenstream.rb → tc_token_stream.rb} +23 -0
  84. data/test/unit/index/tc_index.rb +183 -240
  85. data/test/unit/index/tc_index_reader.rb +312 -479
  86. data/test/unit/index/tc_index_writer.rb +397 -13
  87. data/test/unit/index/th_doc.rb +269 -206
  88. data/test/unit/query_parser/tc_query_parser.rb +40 -33
  89. data/test/unit/search/tc_filter.rb +59 -71
  90. data/test/unit/search/tc_fuzzy_query.rb +24 -16
  91. data/test/unit/search/tc_index_searcher.rb +23 -201
  92. data/test/unit/search/tc_multi_searcher.rb +78 -226
  93. data/test/unit/search/tc_search_and_sort.rb +93 -81
  94. data/test/unit/search/tc_sort.rb +23 -23
  95. data/test/unit/search/tc_sort_field.rb +7 -7
  96. data/test/unit/search/tc_spans.rb +51 -47
  97. data/test/unit/search/tm_searcher.rb +339 -0
  98. data/test/unit/store/tc_fs_store.rb +1 -1
  99. data/test/unit/store/tm_store_lock.rb +3 -3
  100. data/test/unit/tc_document.rb +81 -0
  101. data/test/unit/ts_analysis.rb +1 -1
  102. data/test/unit/ts_utils.rb +1 -1
  103. data/test/unit/utils/tc_bit_vector.rb +288 -0
  104. data/test/unit/utils/tc_number_tools.rb +117 -0
  105. data/test/unit/utils/tc_priority_queue.rb +106 -0
  106. metadata +140 -301
  107. data/CHANGELOG +0 -9
  108. data/ext/dummy.exe +0 -0
  109. data/ext/field.c +0 -408
  110. data/ext/frtio.h +0 -13
  111. data/ext/inc/except.h +0 -90
  112. data/ext/index_io.c +0 -382
  113. data/ext/index_rw.c +0 -2658
  114. data/ext/lang.c +0 -41
  115. data/ext/nix_io.c +0 -134
  116. data/ext/q_multi_phrase.c +0 -380
  117. data/ext/r_doc.c +0 -582
  118. data/ext/r_index_io.c +0 -1021
  119. data/ext/r_term.c +0 -219
  120. data/ext/term.c +0 -820
  121. data/ext/termdocs.c +0 -611
  122. data/ext/vector.c +0 -637
  123. data/ext/w32_io.c +0 -150
  124. data/lib/ferret/analysis.rb +0 -11
  125. data/lib/ferret/analysis/analyzers.rb +0 -112
  126. data/lib/ferret/analysis/standard_tokenizer.rb +0 -71
  127. data/lib/ferret/analysis/token.rb +0 -100
  128. data/lib/ferret/analysis/token_filters.rb +0 -86
  129. data/lib/ferret/analysis/token_stream.rb +0 -26
  130. data/lib/ferret/analysis/tokenizers.rb +0 -112
  131. data/lib/ferret/analysis/word_list_loader.rb +0 -27
  132. data/lib/ferret/document/document.rb +0 -152
  133. data/lib/ferret/document/field.rb +0 -312
  134. data/lib/ferret/index/compound_file_io.rb +0 -338
  135. data/lib/ferret/index/document_writer.rb +0 -289
  136. data/lib/ferret/index/field_infos.rb +0 -279
  137. data/lib/ferret/index/fields_io.rb +0 -181
  138. data/lib/ferret/index/index.rb +0 -675
  139. data/lib/ferret/index/index_file_names.rb +0 -33
  140. data/lib/ferret/index/index_reader.rb +0 -503
  141. data/lib/ferret/index/index_writer.rb +0 -534
  142. data/lib/ferret/index/multi_reader.rb +0 -377
  143. data/lib/ferret/index/multiple_term_doc_pos_enum.rb +0 -98
  144. data/lib/ferret/index/segment_infos.rb +0 -130
  145. data/lib/ferret/index/segment_merge_info.rb +0 -49
  146. data/lib/ferret/index/segment_merge_queue.rb +0 -16
  147. data/lib/ferret/index/segment_merger.rb +0 -358
  148. data/lib/ferret/index/segment_reader.rb +0 -412
  149. data/lib/ferret/index/segment_term_enum.rb +0 -169
  150. data/lib/ferret/index/segment_term_vector.rb +0 -58
  151. data/lib/ferret/index/term.rb +0 -53
  152. data/lib/ferret/index/term_buffer.rb +0 -83
  153. data/lib/ferret/index/term_doc_enum.rb +0 -291
  154. data/lib/ferret/index/term_enum.rb +0 -52
  155. data/lib/ferret/index/term_info.rb +0 -37
  156. data/lib/ferret/index/term_infos_io.rb +0 -321
  157. data/lib/ferret/index/term_vector_offset_info.rb +0 -20
  158. data/lib/ferret/index/term_vectors_io.rb +0 -553
  159. data/lib/ferret/query_parser.rb +0 -312
  160. data/lib/ferret/query_parser/query_parser.tab.rb +0 -928
  161. data/lib/ferret/search.rb +0 -50
  162. data/lib/ferret/search/boolean_clause.rb +0 -100
  163. data/lib/ferret/search/boolean_query.rb +0 -299
  164. data/lib/ferret/search/boolean_scorer.rb +0 -294
  165. data/lib/ferret/search/caching_wrapper_filter.rb +0 -40
  166. data/lib/ferret/search/conjunction_scorer.rb +0 -99
  167. data/lib/ferret/search/disjunction_sum_scorer.rb +0 -205
  168. data/lib/ferret/search/exact_phrase_scorer.rb +0 -32
  169. data/lib/ferret/search/explanation.rb +0 -41
  170. data/lib/ferret/search/field_cache.rb +0 -215
  171. data/lib/ferret/search/field_doc.rb +0 -31
  172. data/lib/ferret/search/field_sorted_hit_queue.rb +0 -184
  173. data/lib/ferret/search/filter.rb +0 -11
  174. data/lib/ferret/search/filtered_query.rb +0 -130
  175. data/lib/ferret/search/filtered_term_enum.rb +0 -79
  176. data/lib/ferret/search/fuzzy_query.rb +0 -154
  177. data/lib/ferret/search/fuzzy_term_enum.rb +0 -247
  178. data/lib/ferret/search/hit_collector.rb +0 -34
  179. data/lib/ferret/search/hit_queue.rb +0 -11
  180. data/lib/ferret/search/index_searcher.rb +0 -200
  181. data/lib/ferret/search/match_all_query.rb +0 -104
  182. data/lib/ferret/search/multi_phrase_query.rb +0 -216
  183. data/lib/ferret/search/multi_searcher.rb +0 -261
  184. data/lib/ferret/search/multi_term_query.rb +0 -65
  185. data/lib/ferret/search/non_matching_scorer.rb +0 -22
  186. data/lib/ferret/search/phrase_positions.rb +0 -55
  187. data/lib/ferret/search/phrase_query.rb +0 -214
  188. data/lib/ferret/search/phrase_scorer.rb +0 -152
  189. data/lib/ferret/search/prefix_query.rb +0 -54
  190. data/lib/ferret/search/query.rb +0 -140
  191. data/lib/ferret/search/query_filter.rb +0 -51
  192. data/lib/ferret/search/range_filter.rb +0 -103
  193. data/lib/ferret/search/range_query.rb +0 -139
  194. data/lib/ferret/search/req_excl_scorer.rb +0 -125
  195. data/lib/ferret/search/req_opt_sum_scorer.rb +0 -70
  196. data/lib/ferret/search/score_doc.rb +0 -38
  197. data/lib/ferret/search/score_doc_comparator.rb +0 -114
  198. data/lib/ferret/search/scorer.rb +0 -91
  199. data/lib/ferret/search/similarity.rb +0 -278
  200. data/lib/ferret/search/sloppy_phrase_scorer.rb +0 -47
  201. data/lib/ferret/search/sort.rb +0 -112
  202. data/lib/ferret/search/sort_comparator.rb +0 -60
  203. data/lib/ferret/search/sort_field.rb +0 -91
  204. data/lib/ferret/search/spans.rb +0 -12
  205. data/lib/ferret/search/spans/near_spans_enum.rb +0 -304
  206. data/lib/ferret/search/spans/span_first_query.rb +0 -79
  207. data/lib/ferret/search/spans/span_near_query.rb +0 -108
  208. data/lib/ferret/search/spans/span_not_query.rb +0 -130
  209. data/lib/ferret/search/spans/span_or_query.rb +0 -176
  210. data/lib/ferret/search/spans/span_query.rb +0 -25
  211. data/lib/ferret/search/spans/span_scorer.rb +0 -74
  212. data/lib/ferret/search/spans/span_term_query.rb +0 -105
  213. data/lib/ferret/search/spans/span_weight.rb +0 -84
  214. data/lib/ferret/search/spans/spans_enum.rb +0 -44
  215. data/lib/ferret/search/term_query.rb +0 -128
  216. data/lib/ferret/search/term_scorer.rb +0 -183
  217. data/lib/ferret/search/top_docs.rb +0 -36
  218. data/lib/ferret/search/top_field_docs.rb +0 -17
  219. data/lib/ferret/search/weight.rb +0 -54
  220. data/lib/ferret/search/wildcard_query.rb +0 -26
  221. data/lib/ferret/search/wildcard_term_enum.rb +0 -61
  222. data/lib/ferret/stemmers.rb +0 -1
  223. data/lib/ferret/stemmers/porter_stemmer.rb +0 -218
  224. data/lib/ferret/store.rb +0 -5
  225. data/lib/ferret/store/buffered_index_io.rb +0 -190
  226. data/lib/ferret/store/directory.rb +0 -141
  227. data/lib/ferret/store/fs_store.rb +0 -381
  228. data/lib/ferret/store/index_io.rb +0 -245
  229. data/lib/ferret/store/ram_store.rb +0 -286
  230. data/lib/ferret/utils.rb +0 -8
  231. data/lib/ferret/utils/bit_vector.rb +0 -123
  232. data/lib/ferret/utils/date_tools.rb +0 -138
  233. data/lib/ferret/utils/number_tools.rb +0 -91
  234. data/lib/ferret/utils/parameter.rb +0 -41
  235. data/lib/ferret/utils/priority_queue.rb +0 -120
  236. data/lib/ferret/utils/string_helper.rb +0 -47
  237. data/lib/ferret/utils/thread_local.rb +0 -28
  238. data/lib/ferret/utils/weak_key_hash.rb +0 -60
  239. data/lib/rferret.rb +0 -37
  240. data/rake_utils/code_statistics.rb +0 -106
  241. data/test/benchmark/tb_ram_store.rb +0 -76
  242. data/test/benchmark/tb_rw_vint.rb +0 -26
  243. data/test/functional/thread_safety_index_test.rb +0 -81
  244. data/test/functional/thread_safety_test.rb +0 -137
  245. data/test/longrunning/tc_numbertools.rb +0 -60
  246. data/test/longrunning/tm_store.rb +0 -19
  247. data/test/unit/analysis/ctc_analyzer.rb +0 -532
  248. data/test/unit/analysis/data/wordfile +0 -6
  249. data/test/unit/analysis/rtc_letter_tokenizer.rb +0 -20
  250. data/test/unit/analysis/rtc_lower_case_filter.rb +0 -20
  251. data/test/unit/analysis/rtc_lower_case_tokenizer.rb +0 -27
  252. data/test/unit/analysis/rtc_per_field_analyzer_wrapper.rb +0 -39
  253. data/test/unit/analysis/rtc_porter_stem_filter.rb +0 -16
  254. data/test/unit/analysis/rtc_standard_analyzer.rb +0 -20
  255. data/test/unit/analysis/rtc_standard_tokenizer.rb +0 -20
  256. data/test/unit/analysis/rtc_stop_analyzer.rb +0 -20
  257. data/test/unit/analysis/rtc_stop_filter.rb +0 -14
  258. data/test/unit/analysis/rtc_white_space_analyzer.rb +0 -21
  259. data/test/unit/analysis/rtc_white_space_tokenizer.rb +0 -20
  260. data/test/unit/analysis/rtc_word_list_loader.rb +0 -32
  261. data/test/unit/analysis/tc_token.rb +0 -25
  262. data/test/unit/document/rtc_field.rb +0 -28
  263. data/test/unit/document/tc_document.rb +0 -47
  264. data/test/unit/document/tc_field.rb +0 -98
  265. data/test/unit/index/rtc_compound_file_io.rb +0 -107
  266. data/test/unit/index/rtc_field_infos.rb +0 -127
  267. data/test/unit/index/rtc_fields_io.rb +0 -167
  268. data/test/unit/index/rtc_multiple_term_doc_pos_enum.rb +0 -83
  269. data/test/unit/index/rtc_segment_infos.rb +0 -74
  270. data/test/unit/index/rtc_segment_term_docs.rb +0 -17
  271. data/test/unit/index/rtc_segment_term_enum.rb +0 -60
  272. data/test/unit/index/rtc_segment_term_vector.rb +0 -71
  273. data/test/unit/index/rtc_term_buffer.rb +0 -57
  274. data/test/unit/index/rtc_term_info.rb +0 -19
  275. data/test/unit/index/rtc_term_infos_io.rb +0 -192
  276. data/test/unit/index/rtc_term_vectors_io.rb +0 -108
  277. data/test/unit/index/tc_term.rb +0 -27
  278. data/test/unit/index/tc_term_voi.rb +0 -18
  279. data/test/unit/search/rtc_similarity.rb +0 -37
  280. data/test/unit/search/rtc_sort_field.rb +0 -14
  281. data/test/unit/search/tc_multi_searcher2.rb +0 -126
  282. data/test/unit/store/rtc_fs_store.rb +0 -62
  283. data/test/unit/store/rtc_ram_store.rb +0 -15
  284. data/test/unit/store/rtm_store.rb +0 -150
  285. data/test/unit/store/rtm_store_lock.rb +0 -2
  286. data/test/unit/ts_document.rb +0 -2
  287. data/test/unit/utils/rtc_bit_vector.rb +0 -73
  288. data/test/unit/utils/rtc_date_tools.rb +0 -50
  289. data/test/unit/utils/rtc_number_tools.rb +0 -59
  290. data/test/unit/utils/rtc_parameter.rb +0 -40
  291. data/test/unit/utils/rtc_priority_queue.rb +0 -62
  292. data/test/unit/utils/rtc_string_helper.rb +0 -21
  293. data/test/unit/utils/rtc_thread.rb +0 -61
  294. data/test/unit/utils/rtc_weak_key_hash.rb +0 -25
  295. data/test/utils/number_to_spoken.rb +0 -132
@@ -2,12 +2,12 @@ require File.dirname(__FILE__) + "/../../test_helper"
2
2
  require File.join(File.dirname(__FILE__), "tc_index_searcher.rb")
3
3
 
4
4
  # make sure a MultiSearcher searching only one index
5
- # passes all the IndexSearcher tests
6
- class SimpleMultiSearcherTest < IndexSearcherTest
5
+ # passes all the Searcher tests
6
+ class SimpleMultiSearcherTest < SearcherTest
7
7
  alias :old_setup :setup
8
8
  def setup()
9
9
  old_setup
10
- @multi = MultiSearcher.new([IndexSearcher.new(@dir)])
10
+ @searcher = MultiSearcher.new([Searcher.new(@dir)])
11
11
  end
12
12
  end
13
13
 
@@ -16,260 +16,112 @@ end
16
16
  # against those of a single indexsearcher searching the same
17
17
  # set of documents
18
18
  class MultiSearcherTest < Test::Unit::TestCase
19
- include Ferret::Document
20
19
  include Ferret::Search
21
20
  include Ferret::Store
22
21
  include Ferret::Analysis
23
22
  include Ferret::Index
24
23
 
25
- def prepare_search_docs(data)
26
- docs = []
27
- data.each_with_index do |fields, i|
28
- doc = Document.new()
29
- fields.each_pair do |field, text|
30
- doc << Field.new(field, text, Field::Store::YES, Field::Index::TOKENIZED, Field::TermVector::NO, false)
31
- end
32
- docs << doc
33
- end
34
- return docs
35
- end
36
-
37
- def prepare_documents
38
- @documents = prepare_search_docs([
39
- {"date" => "20050930", "field" => "word1",
40
- "cat" => "cat1/"},
41
- {"date" => "20051001", "field" => "word1 word2 the quick brown fox",
42
- "cat" => "cat1/sub1"},
43
- {"date" => "20051002", "field" => "word1 word3",
44
- "cat" => "cat1/sub1/subsub1"},
45
- {"date" => "20051003", "field" => "word1 word3",
46
- "cat" => "cat1/sub2"},
47
- {"date" => "20051004", "field" => "word1 word2",
48
- "cat" => "cat1/sub2/subsub2"},
49
- {"date" => "20051005", "field" => "word1",
50
- "cat" => "cat2/sub1"},
51
- {"date" => "20051006", "field" => "word1 word3",
52
- "cat" => "cat2/sub1"},
53
- {"date" => "20051007", "field" => "word1",
54
- "cat" => "cat2/sub1"},
55
- {"date" => "20051008", "field" => "word1 word2 word3 the fast brown fox",
56
- "cat" => "cat2/sub1"}
57
- ])
58
- @documents2 = prepare_search_docs([
59
- {"date" => "20051009", "field" => "word1",
60
- "cat" => "cat3/sub1"},
61
- {"date" => "20051010", "field" => "word1",
62
- "cat" => "cat3/sub1"},
63
- {"date" => "20051011", "field" => "word1 word3 the quick red fox",
64
- "cat" => "cat3/sub1"},
65
- {"date" => "20051012", "field" => "word1",
66
- "cat" => "cat3/sub1"},
67
- {"date" => "20051013", "field" => "word1",
68
- "cat" => "cat1/sub2"},
69
- {"date" => "20051014", "field" => "word1 word3 the quick hairy fox",
70
- "cat" => "cat1/sub1"},
71
- {"date" => "20051015", "field" => "word1",
72
- "cat" => "cat1/sub2/subsub1"},
73
- {"date" => "20051016",
74
- "field" => "word1 the quick fox is brown and hairy and a little red",
75
- "cat" => "cat1/sub1/subsub2"},
76
- {"date" => "20051017", "field" => "word1 the brown fox is quick and red",
77
- "cat" => "cat1/"}
78
- ])
79
- end
24
+ include SearcherTests
25
+
26
+ DOCUMENTS1 = [
27
+ {"date" => "20050930", :field => "word1",
28
+ "cat" => "cat1/"},
29
+ {"date" => "20051001", :field => "word1 word2 the quick brown fox",
30
+ "cat" => "cat1/sub1"},
31
+ {"date" => "20051002", :field => "word1 word3",
32
+ "cat" => "cat1/sub1/subsub1"},
33
+ {"date" => "20051003", :field => "word1 word3",
34
+ "cat" => "cat1/sub2"},
35
+ {"date" => "20051004", :field => "word1 word2",
36
+ "cat" => "cat1/sub2/subsub2"},
37
+ {"date" => "20051005", :field => "word1",
38
+ "cat" => "cat2/sub1"},
39
+ {"date" => "20051006", :field => "word1 word3",
40
+ "cat" => "cat2/sub1"},
41
+ {"date" => "20051007", :field => "word1",
42
+ "cat" => "cat2/sub1"},
43
+ {"date" => "20051008", :field => "word1 word2 word3 the fast brown fox",
44
+ "cat" => "cat2/sub1"}
45
+ ]
46
+
47
+ DOCUMENTS2 = [
48
+ {"date" => "20051009", :field => "word1",
49
+ "cat" => "cat3/sub1"},
50
+ {"date" => "20051010", :field => "word1",
51
+ "cat" => "cat3/sub1"},
52
+ {"date" => "20051011", :field => "word1 word3 the quick red fox",
53
+ "cat" => "cat3/sub1"},
54
+ {"date" => "20051012", :field => "word1",
55
+ "cat" => "cat3/sub1"},
56
+ {"date" => "20051013", :field => "word1",
57
+ "cat" => "cat1/sub2"},
58
+ {"date" => "20051014", :field => "word1 word3 the quick hairy fox",
59
+ "cat" => "cat1/sub1"},
60
+ {"date" => "20051015", :field => "word1",
61
+ "cat" => "cat1/sub2/subsub1"},
62
+ {"date" => "20051016",
63
+ :field => "word1 the quick fox is brown and hairy and a little red",
64
+ "cat" => "cat1/sub1/subsub2"},
65
+ {"date" => "20051017", :field => "word1 the brown fox is quick and red",
66
+ "cat" => "cat1/"}
67
+ ]
80
68
 
81
69
  def setup()
82
- prepare_documents
83
70
  # create MultiSearcher from two seperate searchers
84
71
  dir1 = RAMDirectory.new()
85
- iw1 = IndexWriter.new(dir1, :analyzer => WhiteSpaceAnalyzer.new(), :create => true)
86
- @documents.each { |doc| iw1 << doc }
72
+ iw1 = IndexWriter.new(:dir => dir1,
73
+ :analyzer => WhiteSpaceAnalyzer.new(),
74
+ :create => true)
75
+ DOCUMENTS1.each { |doc| iw1 << doc }
87
76
  iw1.close()
88
77
 
89
78
  dir2 = RAMDirectory.new()
90
- iw2 = IndexWriter.new(dir2, :analyzer => WhiteSpaceAnalyzer.new(), :create => true)
91
- @documents2.each { |doc| iw2 << doc }
79
+ iw2 = IndexWriter.new(:dir => dir2,
80
+ :analyzer => WhiteSpaceAnalyzer.new(),
81
+ :create => true)
82
+ DOCUMENTS2.each { |doc| iw2 << doc }
92
83
  iw2.close()
93
- @multi = Ferret::Search::MultiSearcher.new([IndexSearcher.new(dir1), IndexSearcher.new(dir2)])
84
+ @searcher = Ferret::Search::MultiSearcher.new([Searcher.new(dir1),
85
+ Searcher.new(dir2)])
94
86
 
95
87
  # create single searcher
96
88
  dir = RAMDirectory.new
97
- iw = IndexWriter.new(dir, :analyzer => WhiteSpaceAnalyzer.new(), :create => true)
98
- @documents.each { |doc| iw << doc }
99
- @documents2.each { |doc| iw << doc }
89
+ iw = IndexWriter.new(:dir => dir,
90
+ :analyzer => WhiteSpaceAnalyzer.new(),
91
+ :create => true)
92
+ DOCUMENTS1.each { |doc| iw << doc }
93
+ DOCUMENTS2.each { |doc| iw << doc }
100
94
  iw.close
101
- @single = IndexSearcher.new(dir)
95
+ @single = Searcher.new(dir)
102
96
 
103
- @query_parser = Ferret::QueryParser.new(['date', 'field', 'cat'], :analyzer => WhiteSpaceAnalyzer.new())
97
+ #@query_parser = Ferret::QueryParser.new([:date, :field, :cat], :analyzer => WhiteSpaceAnalyzer.new())
104
98
  end
105
99
 
106
100
  def tear_down()
107
- @multi.close
101
+ @searcher.close
108
102
  @single.close
109
103
  end
110
104
 
111
- def check_hits(query, debug_field=nil)
112
- query = @query_parser.parse(query) if (query.is_a? String)
113
- multi_docs = @multi.search(query)
105
+ def check_hits(query, ignore1, ignore2 = nil, ignore3 = nil)
106
+ multi_docs = @searcher.search(query)
114
107
  single_docs = @single.search(query)
115
- IndexTestHelper.explain(query, @single, debug_field) if debug_field
116
- IndexTestHelper.explain(query, @multi, debug_field) if debug_field
117
- assert_equal(single_docs.score_docs.size, multi_docs.score_docs.size, 'hit count')
108
+ assert_equal(single_docs.hits.size, multi_docs.hits.size, 'hit count')
118
109
  assert_equal(single_docs.total_hits, multi_docs.total_hits, 'hit count')
119
110
 
120
- multi_docs.score_docs.each_with_index { |sd, id|
121
- assert_equal(single_docs.score_docs[id].doc, sd.doc)
122
- assert_equal(single_docs.score_docs[id].score, sd.score)
111
+ multi_docs.hits.each_with_index { |sd, id|
112
+ assert_equal(single_docs.hits[id].doc, sd.doc)
113
+ assert_equal(single_docs.hits[id].score, sd.score)
123
114
  }
124
115
  end
125
116
 
126
117
  def test_get_doc()
127
- assert_equal(18, @multi.max_doc)
128
- assert_equal("20050930", @multi.doc(0).values(:date))
129
- assert_equal("cat1/sub2/subsub2", @multi.doc(4)[:cat])
130
- assert_equal("20051012", @multi.doc(12)[:date])
118
+ assert_equal(18, @searcher.max_doc)
119
+ assert_equal("20050930", @searcher.get_document(0)[:date])
120
+ assert_equal("cat1/sub2/subsub2", @searcher[4][:cat])
121
+ assert_equal("20051012", @searcher.get_document(12)[:date])
131
122
  assert_equal(18, @single.max_doc)
132
- assert_equal("20050930", @single.doc(0).values(:date))
133
- assert_equal("cat1/sub2/subsub2", @single.doc(4)[:cat])
134
- assert_equal("20051012", @single.doc(12)[:date])
135
- end
136
-
137
- def test_term_query
138
- tq = TermQuery.new(Term.new("field", "word2"));
139
- tq.boost = 100
140
- check_hits(tq)
141
-
142
- tq = TermQuery.new(Term.new("field", "2342"));
143
- check_hits(tq)
144
-
145
- tq = TermQuery.new(Term.new("field", ""));
146
- check_hits(tq)
147
-
148
- tq = TermQuery.new(Term.new("field", "word1"));
149
- check_hits(tq)
150
- end
151
-
152
-
153
- def test_boolean_query
154
- bq = BooleanQuery.new()
155
- tq1 = TermQuery.new(Term.new("field", "word1"))
156
- tq2 = TermQuery.new(Term.new("field", "word3"))
157
- bq.add_query(tq1, BooleanClause::Occur::MUST)
158
- bq.add_query(tq2, BooleanClause::Occur::MUST)
159
- check_hits(bq)
160
-
161
- tq3 = TermQuery.new(Term.new("field", "word2"))
162
- bq.add_query(tq3, BooleanClause::Occur::SHOULD)
163
- check_hits(bq)
164
-
165
- bq = BooleanQuery.new()
166
- bq.add_query(tq2, BooleanClause::Occur::MUST)
167
- bq.add_query(tq3, BooleanClause::Occur::MUST_NOT)
168
- check_hits(bq)
169
-
170
- bq = BooleanQuery.new()
171
- bq.add_query(tq2, BooleanClause::Occur::MUST_NOT)
172
- check_hits(bq)
173
-
174
- bq = BooleanQuery.new()
175
- bq.add_query(tq2, BooleanClause::Occur::SHOULD)
176
- bq.add_query(tq3, BooleanClause::Occur::SHOULD)
177
- check_hits(bq)
178
- end
179
-
180
- def test_phrase_query()
181
- pq = PhraseQuery.new()
182
- t1 = Term.new("field", "quick")
183
- t2 = Term.new("field", "brown")
184
- t3 = Term.new("field", "fox")
185
- pq << t1 << t2 << t3
186
- check_hits(pq)
187
-
188
- pq = PhraseQuery.new()
189
- pq << t1
190
- pq.add(t3, 2)
191
- check_hits(pq)
192
-
193
- pq.slop = 1
194
- check_hits(pq)
195
-
196
- pq.slop = 4
197
- check_hits(pq)
198
- end
199
-
200
- def test_range_query()
201
- rq = RangeQuery.new("date", "20051006", "20051010", true, true)
202
- check_hits(rq)
203
-
204
- rq = RangeQuery.new("date", "20051006", "20051010", false, true)
205
- check_hits(rq)
206
-
207
- rq = RangeQuery.new("date", "20051006", "20051010", true, false)
208
- check_hits(rq)
209
-
210
- rq = RangeQuery.new("date", "20051006", "20051010", false, false)
211
- check_hits(rq)
212
-
213
- rq = RangeQuery.new("date", nil, "20051003", false, true)
214
- check_hits(rq)
215
-
216
- rq = RangeQuery.new("date", nil, "20051003", false, false)
217
- check_hits(rq)
218
-
219
- rq = RangeQuery.new_less("date", "20051003", true)
220
- check_hits(rq)
221
-
222
- rq = RangeQuery.new_less("date", "20051003", false)
223
- check_hits(rq)
224
-
225
- rq = RangeQuery.new("date", "20051014", nil, true, false)
226
- check_hits(rq)
227
-
228
- rq = RangeQuery.new("date", "20051014", nil, false, false)
229
- check_hits(rq)
230
-
231
- rq = RangeQuery.new_more("date", "20051014", true)
232
- check_hits(rq)
233
-
234
- rq = RangeQuery.new_more("date", "20051014", false)
235
- check_hits(rq)
236
- end
237
-
238
- def test_prefix_query()
239
- t = Term.new("cat", "cat1")
240
- pq = PrefixQuery.new(t)
241
- check_hits(pq)
242
-
243
- t.text = "cat1/sub2"
244
- pq = PrefixQuery.new(t)
245
- check_hits(pq)
246
- end
247
-
248
- def test_wildcard_query()
249
- t = Term.new("cat", "cat1*")
250
- wq = WildcardQuery.new(t)
251
- check_hits(wq)
252
-
253
- t.text = "cat1*/su??ub2"
254
- wq = WildcardQuery.new(t)
255
- check_hits(wq)
256
- end
257
-
258
- def test_multi_phrase_query()
259
- t11 = Term.new("field", "quick")
260
- t12 = Term.new("field", "fast")
261
- t21 = Term.new("field", "brown")
262
- t22 = Term.new("field", "red")
263
- t23 = Term.new("field", "hairy")
264
- t3 = Term.new("field", "fox")
265
-
266
- mpq = MultiPhraseQuery.new()
267
- mpq << [t11, t12]
268
- mpq << [t21, t22, t23]
269
- mpq << t3
270
- check_hits(mpq)
271
-
272
- mpq.slop = 4
273
- check_hits(mpq)
123
+ assert_equal("20050930", @single.get_document(0)[:date])
124
+ assert_equal("cat1/sub2/subsub2", @single[4][:cat])
125
+ assert_equal("20051012", @single.get_document(12)[:date])
274
126
  end
275
127
  end
@@ -1,37 +1,32 @@
1
1
  require File.dirname(__FILE__) + "/../../test_helper"
2
2
 
3
3
  class SearchAndSortTest < Test::Unit::TestCase
4
- include Ferret::Document
5
4
  include Ferret::Search
6
5
  include Ferret::Store
7
6
  include Ferret::Analysis
8
7
  include Ferret::Index
9
8
 
10
- def add_doc(hash, writer)
11
- doc = Document.new()
12
- hash.each_pair do |field, text|
13
- doc << Field.new(field, text, Field::Store::NO, Field::Index::UNTOKENIZED)
14
- end
15
- doc.boost = hash["float"].to_f
16
- writer << doc
17
- end
18
-
19
9
  def setup()
20
10
  @dir = RAMDirectory.new()
21
- iw = IndexWriter.new(@dir, :analyzer => WhiteSpaceAnalyzer.new(), :create => true, :min_merge_docs => 3)
22
- docs = [ # len mod
23
- {"search"=>"findall","string"=>"a","int"=>"6","float"=>"0.01"}, # 4 0
24
- {"search"=>"findall","string"=>"c","int"=>"5","float"=>"0.1"}, # 3 3
25
- {"search"=>"findall","string"=>"e","int"=>"2","float"=>"0.001"}, # 5 1
26
- {"search"=>"findall","string"=>"g","int"=>"1","float"=>"1.0"}, # 3 3
27
- {"search"=>"findall","string"=>"i","int"=>"3","float"=>"0.0001"}, # 6 2
28
- {"search"=>"findall","string"=>"j","int"=>"4","float"=>"10.0"}, # 4 0
29
- {"search"=>"findall","string"=>"h","int"=>"5","float"=>"0.00001"}, # 7 3
30
- {"search"=>"findall","string"=>"f","int"=>"2","float"=>"100.0"}, # 5 1
31
- {"search"=>"findall","string"=>"d","int"=>"3","float"=>"1000.0"}, # 6 2
32
- {"search"=>"findall","string"=>"b","int"=>"4","float"=>"0.000001"} # 8 0
33
- ]
34
- docs.each {|doc| add_doc(doc, iw)}
11
+ iw = IndexWriter.new(:dir => @dir,
12
+ :analyzer => WhiteSpaceAnalyzer.new(),
13
+ :create => true, :min_merge_docs => 3)
14
+ [ # len mod
15
+ {:x => "findall", :string => "a", :int => "6", :float => "0.01"}, # 4 0
16
+ {:x => "findall", :string => "c", :int => "5", :float => "0.1"}, # 3 3
17
+ {:x => "findall", :string => "e", :int => "2", :float => "0.001"}, # 5 1
18
+ {:x => "findall", :string => "g", :int => "1", :float => "1.0"}, # 3 3
19
+ {:x => "findall", :string => "i", :int => "3", :float => "0.0001"}, # 6 2
20
+ {:x => "findall", :string => "j", :int => "4", :float => "10.0"}, # 4 0
21
+ {:x => "findall", :string => "h", :int => "5", :float => "0.00001"}, # 7 3
22
+ {:x => "findall", :string => "f", :int => "2", :float => "100.0"}, # 5 1
23
+ {:x => "findall", :string => "d", :int => "3", :float => "1000.0"}, # 6 2
24
+ {:x => "findall", :string => "b", :int => "4", :float => "0.000001"} # 8 0
25
+ ].each do |doc|
26
+ doc.extend(Ferret::BoostMixin)
27
+ doc.boost = doc[:float].to_f
28
+ iw << doc
29
+ end
35
30
  iw.close
36
31
  end
37
32
 
@@ -42,57 +37,57 @@ class SearchAndSortTest < Test::Unit::TestCase
42
37
  def do_test_top_docs(is, query, expected, sort = nil)
43
38
  top_docs = is.search(query, {:sort => sort})
44
39
  top_docs.total_hits.times do |i|
45
- assert_equal(expected[i], top_docs.score_docs[i].doc)
40
+ assert_equal(expected[i], top_docs.hits[i].doc)
46
41
  end
47
42
 
48
43
  # test sorting works for smaller ranged query
49
- first_doc = 3
50
- num_docs = 3
44
+ offset = 3
45
+ limit = 3
51
46
  top_docs = is.search(query, {:sort => sort,
52
- :first_doc => first_doc,
53
- :num_docs => num_docs})
54
- num_docs.times do |i|
55
- assert_equal(expected[first_doc + i], top_docs.score_docs[i].doc)
47
+ :offset => offset,
48
+ :limit => limit})
49
+ limit.times do |i|
50
+ assert_equal(expected[offset + i], top_docs.hits[i].doc)
56
51
  end
57
52
  end
58
53
 
59
54
  def test_sort_field_to_s()
60
- assert_equal("<SCORE>", SortField::FIELD_SCORE.to_s);
55
+ assert_equal("<SCORE>", SortField::SCORE.to_s);
61
56
  sf = SortField.new("MyScore",
62
- {:sort_type => SortField::SortType::SCORE,
57
+ {:type => :score,
63
58
  :reverse => true})
64
59
  assert_equal("MyScore:<SCORE>!", sf.to_s)
65
- assert_equal("<DOC>", SortField::FIELD_DOC.to_s);
60
+ assert_equal("<DOC>", SortField::DOC_ID.to_s);
66
61
  sf = SortField.new("MyDoc",
67
- {:sort_type => SortField::SortType::DOC,
62
+ {:type => :doc_id,
68
63
  :reverse => true})
69
64
  assert_equal("MyDoc:<DOC>!", sf.to_s)
70
- sf = SortField.new("date",
71
- {:sort_type => SortField::SortType::INTEGER})
65
+ sf = SortField.new(:date,
66
+ {:type => :integer})
72
67
  assert_equal("date:<integer>", sf.to_s)
73
- sf = SortField.new("date",
74
- {:sort_type => SortField::SortType::INTEGER,
68
+ sf = SortField.new(:date,
69
+ {:type => :integer,
75
70
  :reverse => true})
76
71
  assert_equal("date:<integer>!", sf.to_s)
77
- sf = SortField.new("price",
78
- {:sort_type => SortField::SortType::FLOAT})
72
+ sf = SortField.new(:price,
73
+ {:type => :float})
79
74
  assert_equal("price:<float>", sf.to_s)
80
- sf = SortField.new("price",
81
- {:sort_type => SortField::SortType::FLOAT,
75
+ sf = SortField.new(:price,
76
+ {:type => :float,
82
77
  :reverse => true})
83
78
  assert_equal("price:<float>!", sf.to_s)
84
- sf = SortField.new("content",
85
- {:sort_type => SortField::SortType::STRING})
79
+ sf = SortField.new(:content,
80
+ {:type => :string})
86
81
  assert_equal("content:<string>", sf.to_s)
87
- sf = SortField.new("content",
88
- {:sort_type => SortField::SortType::STRING,
82
+ sf = SortField.new(:content,
83
+ {:type => :string,
89
84
  :reverse => true})
90
85
  assert_equal("content:<string>!", sf.to_s)
91
- sf = SortField.new("auto_field",
92
- {:sort_type => SortField::SortType::AUTO})
86
+ sf = SortField.new(:auto_field,
87
+ {:type => :auto})
93
88
  assert_equal("auto_field:<auto>", sf.to_s)
94
- sf = SortField.new("auto_field",
95
- {:sort_type => SortField::SortType::AUTO,
89
+ sf = SortField.new(:auto_field,
90
+ {:type => :auto,
96
91
  :reverse => true})
97
92
  assert_equal("auto_field:<auto>!", sf.to_s)
98
93
  end
@@ -100,53 +95,70 @@ class SearchAndSortTest < Test::Unit::TestCase
100
95
  def test_sort_to_s()
101
96
  sort = Sort.new
102
97
  assert_equal("Sort[<SCORE>, <DOC>]", sort.to_s)
103
- sf = SortField.new("auto_field",
104
- {:sort_type => SortField::SortType::AUTO,
98
+ sf = SortField.new(:auto_field,
99
+ {:type => :auto,
105
100
  :reverse => true})
106
- sort = Sort.new([sf, SortField::FIELD_SCORE, SortField::FIELD_DOC])
101
+ sort = Sort.new([sf, SortField::SCORE, SortField::DOC_ID])
107
102
  assert_equal("Sort[auto_field:<auto>!, <SCORE>, <DOC>]", sort.to_s)
108
- sort = Sort.new(["one", "two", SortField::FIELD_DOC])
103
+ sort = Sort.new([:one, :two, SortField::DOC_ID])
109
104
  assert_equal("Sort[one:<auto>, two:<auto>, <DOC>]", sort.to_s)
110
- sort = Sort.new(["one", "two"])
105
+ sort = Sort.new([:one, :two])
111
106
  assert_equal("Sort[one:<auto>, two:<auto>, <DOC>]", sort.to_s)
112
107
  end
113
108
 
114
109
 
115
110
  def test_sorts()
116
- is = IndexSearcher.new(@dir)
117
- q = TermQuery.new(Term.new("search", "findall"))
111
+ is = Searcher.new(@dir)
112
+ q = TermQuery.new(:x, "findall")
118
113
  do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9])
119
114
  do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9], Sort::RELEVANCE)
120
- do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9], [SortField::FIELD_SCORE])
115
+ do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9], [SortField::SCORE])
121
116
  do_test_top_docs(is, q, [0,1,2,3,4,5,6,7,8,9], Sort::INDEX_ORDER)
122
- do_test_top_docs(is, q, [0,1,2,3,4,5,6,7,8,9], [SortField::FIELD_DOC])
117
+ do_test_top_docs(is, q, [0,1,2,3,4,5,6,7,8,9], [SortField::DOC_ID])
123
118
 
124
119
  ## int
125
- sf_int = SortField.new("int", {:sort_type => SortField::SortType::INTEGER, :reverse => true})
120
+ sf_int = SortField.new(:int, {:type => :integer, :reverse => true})
126
121
  do_test_top_docs(is, q, [0,1,6,5,9,4,8,2,7,3], [sf_int])
127
- do_test_top_docs(is, q, [0,1,6,5,9,8,4,7,2,3], [sf_int, SortField::FIELD_SCORE])
128
- sf_int = SortField.new("int", {:sort_type => SortField::SortType::INTEGER})
122
+ do_test_top_docs(is, q, [0,1,6,5,9,4,8,2,7,3], "int DESC")
123
+ do_test_top_docs(is, q, [0,1,6,5,9,8,4,7,2,3], [sf_int, SortField::SCORE])
124
+ do_test_top_docs(is, q, [0,1,6,5,9,8,4,7,2,3], "int DESC, SCORE")
125
+ sf_int = SortField.new(:int, {:type => :integer})
129
126
  do_test_top_docs(is, q, [3,2,7,4,8,5,9,1,6,0], [sf_int])
127
+ do_test_top_docs(is, q, [3,2,7,4,8,5,9,1,6,0], "int")
128
+
129
+ ## byte
130
+ do_test_top_docs(is, q, [3,2,7,4,8,5,9,1,6,0],
131
+ [SortField.new(:int, :type => :byte)])
132
+ do_test_top_docs(is, q, [0,1,6,5,9,4,8,2,7,3],
133
+ [SortField.new(:int, :type => :byte, :reverse => true)])
134
+
130
135
 
131
136
  ## float
132
- sf_float = SortField.new("float", {:sort_type => SortField::SortType::FLOAT, :reverse => true})
133
- do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9], Sort.new([sf_float, SortField::FIELD_SCORE]))
134
- sf_float = SortField.new("float", {:sort_type => SortField::SortType::FLOAT})
135
- do_test_top_docs(is, q, [9,6,4,2,0,1,3,5,7,8], Sort.new([sf_float, SortField::FIELD_SCORE]))
137
+ sf_float = SortField.new(:float, {:type => :float, :reverse => true})
138
+ do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9],
139
+ Sort.new([sf_float, SortField::SCORE]))
140
+ do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9], "float DESC, SCORE")
141
+ sf_float = SortField.new(:float, {:type => :float})
142
+ do_test_top_docs(is, q, [9,6,4,2,0,1,3,5,7,8],
143
+ Sort.new([sf_float, SortField::SCORE]))
144
+ do_test_top_docs(is, q, [9,6,4,2,0,1,3,5,7,8], "float, SCORE")
136
145
 
137
146
  ## str
138
- sf_str = SortField.new("string", {:sort_type => SortField::SortType::STRING})
139
- do_test_top_docs(is, q, [0,9,1,8,2,7,3,6,4,5], [sf_str, SortField::FIELD_SCORE])
147
+ sf_str = SortField.new(:string, {:type => :string})
148
+ do_test_top_docs(is, q, [0,9,1,8,2,7,3,6,4,5], [sf_str, SortField::SCORE])
149
+ do_test_top_docs(is, q, [0,9,1,8,2,7,3,6,4,5], "string")
140
150
 
141
151
  ## auto
142
- do_test_top_docs(is, q, [0,9,1,8,2,7,3,6,4,5], Sort.new("string"))
143
- do_test_top_docs(is, q, [3,2,7,4,8,5,9,1,6,0], Sort.new(["int"]))
144
- do_test_top_docs(is, q, [9,6,4,2,0,1,3,5,7,8], Sort.new("float"))
145
- do_test_top_docs(is, q, [9,6,4,2,0,1,3,5,7,8], "float")
146
- do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9], Sort.new("float", true))
147
- do_test_top_docs(is, q, [0,6,1,5,9,4,8,7,2,3], Sort.new(["int", "string"], true))
148
- do_test_top_docs(is, q, [3,2,7,8,4,9,5,1,6,0], Sort.new(["int", "string"]))
149
- do_test_top_docs(is, q, [3,2,7,8,4,9,5,1,6,0], [:int, "string"])
152
+ do_test_top_docs(is, q, [0,9,1,8,2,7,3,6,4,5], Sort.new(:string))
153
+ do_test_top_docs(is, q, [3,2,7,4,8,5,9,1,6,0], Sort.new([:int]))
154
+ do_test_top_docs(is, q, [9,6,4,2,0,1,3,5,7,8], Sort.new(:float))
155
+ do_test_top_docs(is, q, [9,6,4,2,0,1,3,5,7,8], :float)
156
+ do_test_top_docs(is, q, [8,7,5,3,1,0,2,4,6,9], Sort.new(:float, true))
157
+ do_test_top_docs(is, q, [0,6,1,5,9,4,8,7,2,3], Sort.new([:int, :string], true))
158
+ do_test_top_docs(is, q, [0,6,1,5,9,4,8,7,2,3], "int DESC, string DESC")
159
+ do_test_top_docs(is, q, [3,2,7,8,4,9,5,1,6,0], Sort.new([:int, :string]))
160
+ do_test_top_docs(is, q, [3,2,7,8,4,9,5,1,6,0], [:int, :string])
161
+ do_test_top_docs(is, q, [3,2,7,8,4,9,5,1,6,0], "int, string")
150
162
  end
151
163
 
152
164
  #LENGTH = SortField::SortType.new("length", lambda{|str| str.length})
@@ -154,12 +166,12 @@ class SearchAndSortTest < Test::Unit::TestCase
154
166
  # lambda{|i, j| (i%4) <=> (j%4)})
155
167
  #def test_special_sorts
156
168
  # is = IndexSearcher.new(@dir)
157
- # q = TermQuery.new(Term.new("search", "findall"))
158
- # sf = SortField.new("float", {:sort_type => LENGTH, :reverse => true})
169
+ # q = TermQuery.new(Term.new(:x, "findall"))
170
+ # sf = SortField.new(:float, {:type => LENGTH, :reverse => true})
159
171
  # do_test_top_docs(is, q, [9,6,4,8,2,7,0,5,1,3], [sf])
160
- # sf = SortField.new("float", {:sort_type => LENGTH_MODULO, :reverse => true})
172
+ # sf = SortField.new(:float, {:type => LENGTH_MODULO, :reverse => true})
161
173
  # do_test_top_docs(is, q, [1,3,6,4,8,2,7,0,5,9], [sf])
162
- # sf = SortField.new("float", {:sort_type => LENGTH,
174
+ # sf = SortField.new(:float, {:type => LENGTH,
163
175
  # :reverse => true,
164
176
  # :comparator => lambda{|i,j| (j%4) <=> (i%4)}})
165
177
  # do_test_top_docs(is, q, [0,5,9,2,7,4,8,1,3,6], [sf])