ferret 0.9.1 → 0.9.2
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.
- data/README +6 -5
 - data/Rakefile +34 -13
 - data/TODO +1 -0
 - data/TUTORIAL +1 -1
 - data/ext/analysis.c +87 -70
 - data/ext/analysis.h +18 -6
 - data/ext/array.c +1 -2
 - data/ext/array.h +1 -1
 - data/ext/bitvector.c +10 -6
 - data/ext/bitvector.h +2 -2
 - data/ext/compound_io.c +30 -27
 - data/ext/document.c +15 -15
 - data/ext/document.h +5 -5
 - data/ext/except.c +2 -0
 - data/ext/except.h +25 -23
 - data/ext/extconf.rb +1 -0
 - data/ext/ferret.c +10 -8
 - data/ext/ferret.h +9 -8
 - data/ext/field.c +29 -25
 - data/ext/filter.c +52 -14
 - data/ext/frtio.h +13 -0
 - data/ext/fs_store.c +115 -170
 - data/ext/global.c +9 -8
 - data/ext/global.h +17 -13
 - data/ext/hash.c +13 -19
 - data/ext/hash.h +11 -11
 - data/ext/hashset.c +5 -7
 - data/ext/hashset.h +9 -8
 - data/ext/helper.c +1 -1
 - data/ext/helper.h +2 -1
 - data/ext/inc/except.h +25 -23
 - data/ext/inc/lang.h +11 -1
 - data/ext/ind.c +33 -21
 - data/ext/index.h +44 -39
 - data/ext/index_io.c +61 -57
 - data/ext/index_rw.c +418 -361
 - data/ext/lang.c +10 -0
 - data/ext/lang.h +11 -1
 - data/ext/nix_io.c +135 -0
 - data/ext/priorityqueue.c +16 -16
 - data/ext/priorityqueue.h +9 -6
 - data/ext/q_boolean.c +128 -76
 - data/ext/q_const_score.c +20 -20
 - data/ext/q_filtered_query.c +20 -20
 - data/ext/q_fuzzy.c +37 -23
 - data/ext/q_match_all.c +15 -19
 - data/ext/q_multi_phrase.c +87 -46
 - data/ext/q_parser.c +247 -119
 - data/ext/q_phrase.c +86 -52
 - data/ext/q_prefix.c +25 -14
 - data/ext/q_range.c +59 -14
 - data/ext/q_span.c +263 -172
 - data/ext/q_term.c +62 -51
 - data/ext/q_wildcard.c +24 -13
 - data/ext/r_analysis.c +328 -80
 - data/ext/r_doc.c +11 -6
 - data/ext/r_index_io.c +40 -32
 - data/ext/r_qparser.c +15 -14
 - data/ext/r_search.c +270 -152
 - data/ext/r_store.c +32 -17
 - data/ext/ram_store.c +38 -22
 - data/ext/search.c +617 -87
 - data/ext/search.h +227 -163
 - data/ext/similarity.c +54 -45
 - data/ext/similarity.h +3 -3
 - data/ext/sort.c +132 -53
 - data/ext/store.c +21 -2
 - data/ext/store.h +14 -14
 - data/ext/tags +4322 -232
 - data/ext/term.c +140 -109
 - data/ext/termdocs.c +74 -60
 - data/ext/vector.c +181 -152
 - data/ext/w32_io.c +150 -0
 - data/lib/ferret.rb +1 -1
 - data/lib/ferret/analysis/standard_tokenizer.rb +4 -3
 - data/lib/ferret/document/field.rb +1 -1
 - data/lib/ferret/index/field_infos.rb +1 -1
 - data/lib/ferret/index/term.rb +1 -1
 - data/lib/ferret/query_parser/query_parser.tab.rb +8 -24
 - data/lib/ferret/search.rb +1 -0
 - data/lib/ferret/search/boolean_query.rb +0 -4
 - data/lib/ferret/search/index_searcher.rb +21 -8
 - data/lib/ferret/search/multi_phrase_query.rb +7 -0
 - data/lib/ferret/search/multi_searcher.rb +261 -0
 - data/lib/ferret/search/phrase_query.rb +1 -1
 - data/lib/ferret/search/query.rb +34 -5
 - data/lib/ferret/search/sort.rb +7 -3
 - data/lib/ferret/search/sort_field.rb +8 -4
 - data/lib/ferret/store/fs_store.rb +13 -6
 - data/lib/ferret/store/index_io.rb +0 -14
 - data/lib/ferret/store/ram_store.rb +3 -2
 - data/lib/rferret.rb +1 -1
 - data/test/unit/analysis/ctc_analyzer.rb +131 -0
 - data/test/unit/analysis/ctc_tokenstream.rb +98 -9
 - data/test/unit/index/tc_index.rb +40 -1
 - data/test/unit/index/tc_term.rb +7 -0
 - data/test/unit/index/th_doc.rb +8 -0
 - data/test/unit/query_parser/tc_query_parser.rb +6 -4
 - data/test/unit/search/rtc_sort_field.rb +6 -6
 - data/test/unit/search/tc_index_searcher.rb +8 -0
 - data/test/unit/search/tc_multi_searcher.rb +275 -0
 - data/test/unit/search/tc_multi_searcher2.rb +126 -0
 - data/test/unit/search/tc_search_and_sort.rb +66 -0
 - metadata +31 -26
 - data/test/unit/query_parser/rtc_query_parser.rb +0 -138
 
| 
         @@ -44,8 +44,74 @@ class SearchAndSortTest < Test::Unit::TestCase 
     | 
|
| 
       44 
44 
     | 
    
         
             
                top_docs.total_hits.times do |i|
         
     | 
| 
       45 
45 
     | 
    
         
             
                  assert_equal(expected[i], top_docs.score_docs[i].doc)
         
     | 
| 
       46 
46 
     | 
    
         
             
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                # test sorting works for smaller ranged query
         
     | 
| 
      
 49 
     | 
    
         
            +
                first_doc = 3
         
     | 
| 
      
 50 
     | 
    
         
            +
                num_docs = 3
         
     | 
| 
      
 51 
     | 
    
         
            +
                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)
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              def test_sort_field_to_s()
         
     | 
| 
      
 60 
     | 
    
         
            +
                assert_equal("<SCORE>", SortField::FIELD_SCORE.to_s);
         
     | 
| 
      
 61 
     | 
    
         
            +
                sf = SortField.new("MyScore",
         
     | 
| 
      
 62 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::SCORE,
         
     | 
| 
      
 63 
     | 
    
         
            +
                                    :reverse => true})
         
     | 
| 
      
 64 
     | 
    
         
            +
                assert_equal("MyScore:<SCORE>!", sf.to_s)
         
     | 
| 
      
 65 
     | 
    
         
            +
                assert_equal("<DOC>", SortField::FIELD_DOC.to_s);
         
     | 
| 
      
 66 
     | 
    
         
            +
                sf = SortField.new("MyDoc",
         
     | 
| 
      
 67 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::DOC,
         
     | 
| 
      
 68 
     | 
    
         
            +
                                    :reverse => true})
         
     | 
| 
      
 69 
     | 
    
         
            +
                assert_equal("MyDoc:<DOC>!", sf.to_s)
         
     | 
| 
      
 70 
     | 
    
         
            +
                sf = SortField.new("date",
         
     | 
| 
      
 71 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::INTEGER})
         
     | 
| 
      
 72 
     | 
    
         
            +
                assert_equal("date:<integer>", sf.to_s)
         
     | 
| 
      
 73 
     | 
    
         
            +
                sf = SortField.new("date",
         
     | 
| 
      
 74 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::INTEGER,
         
     | 
| 
      
 75 
     | 
    
         
            +
                                    :reverse => true})
         
     | 
| 
      
 76 
     | 
    
         
            +
                assert_equal("date:<integer>!", sf.to_s)
         
     | 
| 
      
 77 
     | 
    
         
            +
                sf = SortField.new("price",
         
     | 
| 
      
 78 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::FLOAT})
         
     | 
| 
      
 79 
     | 
    
         
            +
                assert_equal("price:<float>", sf.to_s)
         
     | 
| 
      
 80 
     | 
    
         
            +
                sf = SortField.new("price",
         
     | 
| 
      
 81 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::FLOAT,
         
     | 
| 
      
 82 
     | 
    
         
            +
                                    :reverse => true})
         
     | 
| 
      
 83 
     | 
    
         
            +
                assert_equal("price:<float>!", sf.to_s)
         
     | 
| 
      
 84 
     | 
    
         
            +
                sf = SortField.new("content",
         
     | 
| 
      
 85 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::STRING})
         
     | 
| 
      
 86 
     | 
    
         
            +
                assert_equal("content:<string>", sf.to_s)
         
     | 
| 
      
 87 
     | 
    
         
            +
                sf = SortField.new("content",
         
     | 
| 
      
 88 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::STRING,
         
     | 
| 
      
 89 
     | 
    
         
            +
                                    :reverse => true})
         
     | 
| 
      
 90 
     | 
    
         
            +
                assert_equal("content:<string>!", sf.to_s)
         
     | 
| 
      
 91 
     | 
    
         
            +
                sf = SortField.new("auto_field",
         
     | 
| 
      
 92 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::AUTO})
         
     | 
| 
      
 93 
     | 
    
         
            +
                assert_equal("auto_field:<auto>", sf.to_s)
         
     | 
| 
      
 94 
     | 
    
         
            +
                sf = SortField.new("auto_field",
         
     | 
| 
      
 95 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::AUTO,
         
     | 
| 
      
 96 
     | 
    
         
            +
                                    :reverse => true})
         
     | 
| 
      
 97 
     | 
    
         
            +
                assert_equal("auto_field:<auto>!", sf.to_s)
         
     | 
| 
      
 98 
     | 
    
         
            +
              end
         
     | 
| 
      
 99 
     | 
    
         
            +
              
         
     | 
| 
      
 100 
     | 
    
         
            +
              def test_sort_to_s()
         
     | 
| 
      
 101 
     | 
    
         
            +
                sort = Sort.new
         
     | 
| 
      
 102 
     | 
    
         
            +
                assert_equal("Sort[<SCORE>, <DOC>]", sort.to_s)
         
     | 
| 
      
 103 
     | 
    
         
            +
                sf = SortField.new("auto_field",
         
     | 
| 
      
 104 
     | 
    
         
            +
                                   {:sort_type => SortField::SortType::AUTO,
         
     | 
| 
      
 105 
     | 
    
         
            +
                                    :reverse => true})
         
     | 
| 
      
 106 
     | 
    
         
            +
                sort = Sort.new([sf, SortField::FIELD_SCORE, SortField::FIELD_DOC])
         
     | 
| 
      
 107 
     | 
    
         
            +
                assert_equal("Sort[auto_field:<auto>!, <SCORE>, <DOC>]", sort.to_s)
         
     | 
| 
      
 108 
     | 
    
         
            +
                sort = Sort.new(["one", "two", SortField::FIELD_DOC])
         
     | 
| 
      
 109 
     | 
    
         
            +
                assert_equal("Sort[one:<auto>, two:<auto>, <DOC>]", sort.to_s)
         
     | 
| 
      
 110 
     | 
    
         
            +
                sort = Sort.new(["one", "two"])
         
     | 
| 
      
 111 
     | 
    
         
            +
                assert_equal("Sort[one:<auto>, two:<auto>, <DOC>]", sort.to_s)
         
     | 
| 
       47 
112 
     | 
    
         
             
              end
         
     | 
| 
       48 
113 
     | 
    
         | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
       49 
115 
     | 
    
         
             
              def test_sorts()
         
     | 
| 
       50 
116 
     | 
    
         
             
                is = IndexSearcher.new(@dir)
         
     | 
| 
       51 
117 
     | 
    
         
             
                q = TermQuery.new(Term.new("search", "findall"))
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -3,8 +3,8 @@ rubygems_version: 0.8.11 
     | 
|
| 
       3 
3 
     | 
    
         
             
            specification_version: 1
         
     | 
| 
       4 
4 
     | 
    
         
             
            name: ferret
         
     | 
| 
       5 
5 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       6 
     | 
    
         
            -
              version: 0.9. 
     | 
| 
       7 
     | 
    
         
            -
            date: 2006- 
     | 
| 
      
 6 
     | 
    
         
            +
              version: 0.9.2
         
     | 
| 
      
 7 
     | 
    
         
            +
            date: 2006-05-11 00:00:00 +09:00
         
     | 
| 
       8 
8 
     | 
    
         
             
            summary: Ruby indexing library.
         
     | 
| 
       9 
9 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -30,9 +30,9 @@ authors: 
     | 
|
| 
       30 
30 
     | 
    
         
             
            files: 
         
     | 
| 
       31 
31 
     | 
    
         
             
            - setup.rb
         
     | 
| 
       32 
32 
     | 
    
         
             
            - Rakefile
         
     | 
| 
      
 33 
     | 
    
         
            +
            - TODO
         
     | 
| 
       33 
34 
     | 
    
         
             
            - README
         
     | 
| 
       34 
35 
     | 
    
         
             
            - MIT-LICENSE
         
     | 
| 
       35 
     | 
    
         
            -
            - TODO
         
     | 
| 
       36 
36 
     | 
    
         
             
            - TUTORIAL
         
     | 
| 
       37 
37 
     | 
    
         
             
            - CHANGELOG
         
     | 
| 
       38 
38 
     | 
    
         
             
            - ext/ferret.c
         
     | 
| 
         @@ -51,7 +51,6 @@ files: 
     | 
|
| 
       51 
51 
     | 
    
         
             
            - ext/document.c
         
     | 
| 
       52 
52 
     | 
    
         
             
            - ext/compound_io.c
         
     | 
| 
       53 
53 
     | 
    
         
             
            - ext/index_rw.c
         
     | 
| 
       54 
     | 
    
         
            -
            - ext/termdocs.c
         
     | 
| 
       55 
54 
     | 
    
         
             
            - ext/vector.c
         
     | 
| 
       56 
55 
     | 
    
         
             
            - ext/field.c
         
     | 
| 
       57 
56 
     | 
    
         
             
            - ext/term.c
         
     | 
| 
         @@ -60,20 +59,20 @@ files: 
     | 
|
| 
       60 
59 
     | 
    
         
             
            - ext/q_boolean.c
         
     | 
| 
       61 
60 
     | 
    
         
             
            - ext/q_match_all.c
         
     | 
| 
       62 
61 
     | 
    
         
             
            - ext/q_phrase.c
         
     | 
| 
       63 
     | 
    
         
            -
            - ext/ 
     | 
| 
      
 62 
     | 
    
         
            +
            - ext/q_filtered_query.c
         
     | 
| 
       64 
63 
     | 
    
         
             
            - ext/search.c
         
     | 
| 
       65 
64 
     | 
    
         
             
            - ext/dummy.exe
         
     | 
| 
       66 
     | 
    
         
            -
            - ext/ 
     | 
| 
      
 65 
     | 
    
         
            +
            - ext/q_fuzzy.c
         
     | 
| 
       67 
66 
     | 
    
         
             
            - ext/q_wildcard.c
         
     | 
| 
       68 
67 
     | 
    
         
             
            - ext/ind.c
         
     | 
| 
       69 
68 
     | 
    
         
             
            - ext/q_range.c
         
     | 
| 
      
 69 
     | 
    
         
            +
            - ext/q_multi_phrase.c
         
     | 
| 
       70 
70 
     | 
    
         
             
            - ext/q_prefix.c
         
     | 
| 
       71 
71 
     | 
    
         
             
            - ext/q_span.c
         
     | 
| 
       72 
72 
     | 
    
         
             
            - ext/filter.c
         
     | 
| 
       73 
73 
     | 
    
         
             
            - ext/similarity.c
         
     | 
| 
       74 
     | 
    
         
            -
            - ext/sort.c
         
     | 
| 
       75 
74 
     | 
    
         
             
            - ext/q_term.c
         
     | 
| 
       76 
     | 
    
         
            -
            - ext/ 
     | 
| 
      
 75 
     | 
    
         
            +
            - ext/sort.c
         
     | 
| 
       77 
76 
     | 
    
         
             
            - ext/index_io.c
         
     | 
| 
       78 
77 
     | 
    
         
             
            - ext/fs_store.c
         
     | 
| 
       79 
78 
     | 
    
         
             
            - ext/ram_store.c
         
     | 
| 
         @@ -86,22 +85,6 @@ files: 
     | 
|
| 
       86 
85 
     | 
    
         
             
            - ext/hash.c
         
     | 
| 
       87 
86 
     | 
    
         
             
            - ext/except.c
         
     | 
| 
       88 
87 
     | 
    
         
             
            - ext/priorityqueue.c
         
     | 
| 
       89 
     | 
    
         
            -
            - ext/document.h
         
     | 
| 
       90 
     | 
    
         
            -
            - ext/store.h
         
     | 
| 
       91 
     | 
    
         
            -
            - ext/array.h
         
     | 
| 
       92 
     | 
    
         
            -
            - ext/priorityqueue.h
         
     | 
| 
       93 
     | 
    
         
            -
            - ext/hashset.h
         
     | 
| 
       94 
     | 
    
         
            -
            - ext/helper.h
         
     | 
| 
       95 
     | 
    
         
            -
            - ext/global.h
         
     | 
| 
       96 
     | 
    
         
            -
            - ext/lang.h
         
     | 
| 
       97 
     | 
    
         
            -
            - ext/bitvector.h
         
     | 
| 
       98 
     | 
    
         
            -
            - ext/analysis.h
         
     | 
| 
       99 
     | 
    
         
            -
            - ext/hash.h
         
     | 
| 
       100 
     | 
    
         
            -
            - ext/search.h
         
     | 
| 
       101 
     | 
    
         
            -
            - ext/ferret.h
         
     | 
| 
       102 
     | 
    
         
            -
            - ext/index.h
         
     | 
| 
       103 
     | 
    
         
            -
            - ext/except.h
         
     | 
| 
       104 
     | 
    
         
            -
            - ext/similarity.h
         
     | 
| 
       105 
88 
     | 
    
         
             
            - ext/libstemmer.h
         
     | 
| 
       106 
89 
     | 
    
         
             
            - ext/libstemmer.c
         
     | 
| 
       107 
90 
     | 
    
         
             
            - ext/modules.h
         
     | 
| 
         @@ -112,6 +95,7 @@ files: 
     | 
|
| 
       112 
95 
     | 
    
         
             
            - ext/stem_ISO_8859_1_italian.c
         
     | 
| 
       113 
96 
     | 
    
         
             
            - ext/stem_UTF_8_portuguese.c
         
     | 
| 
       114 
97 
     | 
    
         
             
            - ext/stem_UTF_8_portuguese.h
         
     | 
| 
      
 98 
     | 
    
         
            +
            - ext/ferret.h
         
     | 
| 
       115 
99 
     | 
    
         
             
            - ext/stem_UTF_8_french.c
         
     | 
| 
       116 
100 
     | 
    
         
             
            - ext/stem_UTF_8_spanish.c
         
     | 
| 
       117 
101 
     | 
    
         
             
            - ext/stem_UTF_8_dutch.c
         
     | 
| 
         @@ -130,7 +114,6 @@ files: 
     | 
|
| 
       130 
114 
     | 
    
         
             
            - ext/stem_ISO_8859_1_portuguese.c
         
     | 
| 
       131 
115 
     | 
    
         
             
            - ext/stem_UTF_8_russian.c
         
     | 
| 
       132 
116 
     | 
    
         
             
            - ext/stem_ISO_8859_1_spanish.c
         
     | 
| 
       133 
     | 
    
         
            -
            - ext/tags
         
     | 
| 
       134 
117 
     | 
    
         
             
            - ext/stem_ISO_8859_1_french.c
         
     | 
| 
       135 
118 
     | 
    
         
             
            - ext/stem_ISO_8859_1_portuguese.h
         
     | 
| 
       136 
119 
     | 
    
         
             
            - ext/stem_ISO_8859_1_dutch.c
         
     | 
| 
         @@ -140,6 +123,7 @@ files: 
     | 
|
| 
       140 
123 
     | 
    
         
             
            - ext/stem_ISO_8859_1_spanish.h
         
     | 
| 
       141 
124 
     | 
    
         
             
            - ext/stem_ISO_8859_1_french.h
         
     | 
| 
       142 
125 
     | 
    
         
             
            - ext/stem_ISO_8859_1_porter.c
         
     | 
| 
      
 126 
     | 
    
         
            +
            - ext/tags
         
     | 
| 
       143 
127 
     | 
    
         
             
            - ext/stem_ISO_8859_1_dutch.h
         
     | 
| 
       144 
128 
     | 
    
         
             
            - ext/stem_UTF_8_finnish.c
         
     | 
| 
       145 
129 
     | 
    
         
             
            - ext/stem_KOI8_R_russian.h
         
     | 
| 
         @@ -162,6 +146,24 @@ files: 
     | 
|
| 
       162 
146 
     | 
    
         
             
            - ext/stem_ISO_8859_1_danish.h
         
     | 
| 
       163 
147 
     | 
    
         
             
            - ext/stem_UTF_8_english.h
         
     | 
| 
       164 
148 
     | 
    
         
             
            - ext/stem_UTF_8_norwegian.h
         
     | 
| 
      
 149 
     | 
    
         
            +
            - ext/document.h
         
     | 
| 
      
 150 
     | 
    
         
            +
            - ext/store.h
         
     | 
| 
      
 151 
     | 
    
         
            +
            - ext/array.h
         
     | 
| 
      
 152 
     | 
    
         
            +
            - ext/priorityqueue.h
         
     | 
| 
      
 153 
     | 
    
         
            +
            - ext/hashset.h
         
     | 
| 
      
 154 
     | 
    
         
            +
            - ext/helper.h
         
     | 
| 
      
 155 
     | 
    
         
            +
            - ext/global.h
         
     | 
| 
      
 156 
     | 
    
         
            +
            - ext/bitvector.h
         
     | 
| 
      
 157 
     | 
    
         
            +
            - ext/analysis.h
         
     | 
| 
      
 158 
     | 
    
         
            +
            - ext/hash.h
         
     | 
| 
      
 159 
     | 
    
         
            +
            - ext/search.h
         
     | 
| 
      
 160 
     | 
    
         
            +
            - ext/similarity.h
         
     | 
| 
      
 161 
     | 
    
         
            +
            - ext/index.h
         
     | 
| 
      
 162 
     | 
    
         
            +
            - ext/except.h
         
     | 
| 
      
 163 
     | 
    
         
            +
            - ext/lang.h
         
     | 
| 
      
 164 
     | 
    
         
            +
            - ext/frtio.h
         
     | 
| 
      
 165 
     | 
    
         
            +
            - ext/w32_io.c
         
     | 
| 
      
 166 
     | 
    
         
            +
            - ext/nix_io.c
         
     | 
| 
       165 
167 
     | 
    
         
             
            - ext/inc/lang.h
         
     | 
| 
       166 
168 
     | 
    
         
             
            - ext/inc/except.h
         
     | 
| 
       167 
169 
     | 
    
         
             
            - lib/ferret.rb
         
     | 
| 
         @@ -257,6 +259,7 @@ files: 
     | 
|
| 
       257 
259 
     | 
    
         
             
            - lib/ferret/search/range_filter.rb
         
     | 
| 
       258 
260 
     | 
    
         
             
            - lib/ferret/search/field_cache.rb
         
     | 
| 
       259 
261 
     | 
    
         
             
            - lib/ferret/search/match_all_query.rb
         
     | 
| 
      
 262 
     | 
    
         
            +
            - lib/ferret/search/multi_searcher.rb
         
     | 
| 
       260 
263 
     | 
    
         
             
            - lib/ferret/search/spans/near_spans_enum.rb
         
     | 
| 
       261 
264 
     | 
    
         
             
            - lib/ferret/search/spans/span_first_query.rb
         
     | 
| 
       262 
265 
     | 
    
         
             
            - lib/ferret/search/spans/spans_enum.rb
         
     | 
| 
         @@ -345,13 +348,14 @@ files: 
     | 
|
| 
       345 
348 
     | 
    
         
             
            - test/unit/document/rtc_field.rb
         
     | 
| 
       346 
349 
     | 
    
         
             
            - test/unit/document/tc_document.rb
         
     | 
| 
       347 
350 
     | 
    
         
             
            - test/unit/query_parser/tc_query_parser.rb
         
     | 
| 
       348 
     | 
    
         
            -
            - test/unit/query_parser/rtc_query_parser.rb
         
     | 
| 
       349 
351 
     | 
    
         
             
            - test/unit/search/tc_fuzzy_query.rb
         
     | 
| 
      
 352 
     | 
    
         
            +
            - test/unit/search/tc_multi_searcher2.rb
         
     | 
| 
       350 
353 
     | 
    
         
             
            - test/unit/search/tc_index_searcher.rb
         
     | 
| 
       351 
354 
     | 
    
         
             
            - test/unit/search/tc_spans.rb
         
     | 
| 
       352 
355 
     | 
    
         
             
            - test/unit/search/tc_filter.rb
         
     | 
| 
       353 
356 
     | 
    
         
             
            - test/unit/search/tc_sort.rb
         
     | 
| 
       354 
357 
     | 
    
         
             
            - test/unit/search/tc_sort_field.rb
         
     | 
| 
      
 358 
     | 
    
         
            +
            - test/unit/search/tc_multi_searcher.rb
         
     | 
| 
       355 
359 
     | 
    
         
             
            - test/unit/search/rtc_sort_field.rb
         
     | 
| 
       356 
360 
     | 
    
         
             
            - test/unit/search/rtc_similarity.rb
         
     | 
| 
       357 
361 
     | 
    
         
             
            - test/unit/search/tc_search_and_sort.rb
         
     | 
| 
         @@ -364,6 +368,7 @@ files: 
     | 
|
| 
       364 
368 
     | 
    
         
             
            - test/utils/number_to_spoken.rb
         
     | 
| 
       365 
369 
     | 
    
         
             
            - test/unit/analysis/data/wordfile
         
     | 
| 
       366 
370 
     | 
    
         
             
            - rake_utils/code_statistics.rb
         
     | 
| 
      
 371 
     | 
    
         
            +
            - ext/termdocs.c
         
     | 
| 
       367 
372 
     | 
    
         
             
            test_files: []
         
     | 
| 
       368 
373 
     | 
    
         | 
| 
       369 
374 
     | 
    
         
             
            rdoc_options: 
         
     | 
| 
         @@ -1,138 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require File.dirname(__FILE__) + "/../../test_helper"
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            class QueryParserTest < Test::Unit::TestCase
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
              def test_strings()
         
     | 
| 
       6 
     | 
    
         
            -
                parser = Ferret::QueryParser.new("xxx", :fields => ["f1", "f2", "f3"])
         
     | 
| 
       7 
     | 
    
         
            -
                pairs = [
         
     | 
| 
       8 
     | 
    
         
            -
                  ['', ''],
         
     | 
| 
       9 
     | 
    
         
            -
                  ['word', 'word'],
         
     | 
| 
       10 
     | 
    
         
            -
                  ['field:word', 'field:word'],
         
     | 
| 
       11 
     | 
    
         
            -
                  ['"word1 word2 word3"', '"word word word"'],
         
     | 
| 
       12 
     | 
    
         
            -
                  ['"word1 2342 word3"', '"word word"'],
         
     | 
| 
       13 
     | 
    
         
            -
                  ['field:"one two three"', 'field:"one two three"'],
         
     | 
| 
       14 
     | 
    
         
            -
                  ['field:"one 222 three"', 'field:"one three"'],
         
     | 
| 
       15 
     | 
    
         
            -
                  ['field:"one <> three"', 'field:"one <> three"'],
         
     | 
| 
       16 
     | 
    
         
            -
                  ['field:"one <> three <>"', 'field:"one <> three"'],
         
     | 
| 
       17 
     | 
    
         
            -
                  ['field:"one <> <> <> three <>"', 'field:"one <> <> <> three"'],
         
     | 
| 
       18 
     | 
    
         
            -
                  ['field:"one <> <> <> three|four|five <>"', 'field:"one <> <> <> three|four|five"'],
         
     | 
| 
       19 
     | 
    
         
            -
                  ['field:"one|two three|four|five six|seven"', 'field:"one|two three|four|five six|seven"'],
         
     | 
| 
       20 
     | 
    
         
            -
                  ['contents:"testing|trucks"', 'contents:testing contents:trucks'],
         
     | 
| 
       21 
     | 
    
         
            -
                  ['[aaa bbb]', '[aaa bbb]'],
         
     | 
| 
       22 
     | 
    
         
            -
                  ['{aaa bbb]', '{aaa bbb]'],
         
     | 
| 
       23 
     | 
    
         
            -
                  ['field:[aaa bbb}', 'field:[aaa bbb}'],
         
     | 
| 
       24 
     | 
    
         
            -
                  ['{aaa bbb}', '{aaa bbb}'],
         
     | 
| 
       25 
     | 
    
         
            -
                  ['{aaa>', '{aaa>'],
         
     | 
| 
       26 
     | 
    
         
            -
                  ['[aaa>', '[aaa>'],
         
     | 
| 
       27 
     | 
    
         
            -
                  ['field:<aaa}', 'field:<aaa}'],
         
     | 
| 
       28 
     | 
    
         
            -
                  ['<aaa]', '<aaa]'],
         
     | 
| 
       29 
     | 
    
         
            -
                  ['>aaa', '{aaa>'],
         
     | 
| 
       30 
     | 
    
         
            -
                  ['>=aaa', '[aaa>'],
         
     | 
| 
       31 
     | 
    
         
            -
                  ['<aaa', '<aaa}'],
         
     | 
| 
       32 
     | 
    
         
            -
                  ['field:<=aaa', 'field:<aaa]'],
         
     | 
| 
       33 
     | 
    
         
            -
                  ['REQ one REQ two', '+one +two'],
         
     | 
| 
       34 
     | 
    
         
            -
                  ['REQ one two', '+one two'],
         
     | 
| 
       35 
     | 
    
         
            -
                  ['one REQ two', 'one +two'],
         
     | 
| 
       36 
     | 
    
         
            -
                  ['+one +two', '+one +two'],
         
     | 
| 
       37 
     | 
    
         
            -
                  ['+one two', '+one two'],
         
     | 
| 
       38 
     | 
    
         
            -
                  ['one +two', 'one +two'],
         
     | 
| 
       39 
     | 
    
         
            -
                  ['-one -two', '-one -two'],
         
     | 
| 
       40 
     | 
    
         
            -
                  ['-one two', '-one two'],
         
     | 
| 
       41 
     | 
    
         
            -
                  ['one -two', 'one -two'],
         
     | 
| 
       42 
     | 
    
         
            -
                  ['!one !two', '-one -two'],
         
     | 
| 
       43 
     | 
    
         
            -
                  ['!one two', '-one two'],
         
     | 
| 
       44 
     | 
    
         
            -
                  ['one !two', 'one -two'],
         
     | 
| 
       45 
     | 
    
         
            -
                  ['NOT one NOT two', '-one -two'],
         
     | 
| 
       46 
     | 
    
         
            -
                  ['NOT one two', '-one two'],
         
     | 
| 
       47 
     | 
    
         
            -
                  ['one NOT two', 'one -two'],
         
     | 
| 
       48 
     | 
    
         
            -
                  ['one two', 'one two'],
         
     | 
| 
       49 
     | 
    
         
            -
                  ['one OR two', 'one two'],
         
     | 
| 
       50 
     | 
    
         
            -
                  ['one AND two', '+one +two'],
         
     | 
| 
       51 
     | 
    
         
            -
                  ['one two AND three', 'one two +three'],
         
     | 
| 
       52 
     | 
    
         
            -
                  ['one two OR three', 'one two three'],
         
     | 
| 
       53 
     | 
    
         
            -
                  ['one (two AND three)', 'one (+two +three)'],
         
     | 
| 
       54 
     | 
    
         
            -
                  ['one AND (two OR three)', '+one +(two three)'],
         
     | 
| 
       55 
     | 
    
         
            -
                  ['field:(one AND (two OR three))', '+field:one +(field:two field:three)'],
         
     | 
| 
       56 
     | 
    
         
            -
                  ['one AND (two OR [aaa vvv})', '+one +(two [aaa vvv})'],
         
     | 
| 
       57 
     | 
    
         
            -
                  ['one AND (one:two OR two:three) AND four', '+one +(one:two two:three) +four'],
         
     | 
| 
       58 
     | 
    
         
            -
                  ['one^1.23', 'one^1.23'],
         
     | 
| 
       59 
     | 
    
         
            -
                  ['(one AND two)^100.23', '(+one +two)^100.23'],
         
     | 
| 
       60 
     | 
    
         
            -
                  ['field:(one AND two)^100.23', '(+field:one +field:two)^100.23'],
         
     | 
| 
       61 
     | 
    
         
            -
                  ['field:(one AND [aaa bbb]^23.3)^100.23', '(+field:one +field:[aaa bbb]^23.3)^100.23'],
         
     | 
| 
       62 
     | 
    
         
            -
                  ['(REQ field:"one two three")^23', 'field:"one two three"^23.0'],
         
     | 
| 
       63 
     | 
    
         
            -
                  ['asdf~0.2', 'asdf~0.2'],
         
     | 
| 
       64 
     | 
    
         
            -
                  ['field:asdf~0.2', 'field:asdf~0.2'],
         
     | 
| 
       65 
     | 
    
         
            -
                  ['asdf~0.2^100.0', 'asdf~0.2^100.0'],
         
     | 
| 
       66 
     | 
    
         
            -
                  ['field:asdf~0.2^0.1', 'field:asdf~0.2^0.1'],
         
     | 
| 
       67 
     | 
    
         
            -
                  ['field:"asdf <> asdf|asdf"~4', 'field:"asdf <> asdf|asdf"~4'],
         
     | 
| 
       68 
     | 
    
         
            -
                  ['"one two three four five"~5', '"one two three four five"~5'],
         
     | 
| 
       69 
     | 
    
         
            -
                  ['ab?de', 'ab?de'],
         
     | 
| 
       70 
     | 
    
         
            -
                  ['ab*de', 'ab*de'],
         
     | 
| 
       71 
     | 
    
         
            -
                  ['asdf?*?asd*dsf?asfd*asdf?', 'asdf?*?asd*dsf?asfd*asdf?'],
         
     | 
| 
       72 
     | 
    
         
            -
                  ['field:a* AND field:(b*)', '+field:a* +field:b*'],
         
     | 
| 
       73 
     | 
    
         
            -
                  ['field:abc~ AND field:(b*)', '+field:abc~ +field:b*'],
         
     | 
| 
       74 
     | 
    
         
            -
                  ['asdf?*?asd*dsf?asfd*asdf?^20.0', 'asdf?*?asd*dsf?asfd*asdf?^20.0'],
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                  ['*:xxx', 'f1:xxx f2:xxx f3:xxx'],
         
     | 
| 
       77 
     | 
    
         
            -
                  ['f1|f2:xxx', 'f1:xxx f2:xxx'],
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                  ['*:asd~0.2', 'f1:asd~0.2 f2:asd~0.2 f3:asd~0.2'],
         
     | 
| 
       80 
     | 
    
         
            -
                  ['f1|f2:asd~0.2', 'f1:asd~0.2 f2:asd~0.2'],
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                  ['*:a?d*^20.0', '(f1:a?d* f2:a?d* f3:a?d*)^20.0'],
         
     | 
| 
       83 
     | 
    
         
            -
                  ['f1|f2:a?d*^20.0', '(f1:a?d* f2:a?d*)^20.0'],
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                  ['*:"asdf <> xxx|yyy"', 'f1:"asdf <> xxx|yyy" f2:"asdf <> xxx|yyy" f3:"asdf <> xxx|yyy"'],
         
     | 
| 
       86 
     | 
    
         
            -
                  ['f1|f2:"asdf <> xxx|yyy"', 'f1:"asdf <> xxx|yyy" f2:"asdf <> xxx|yyy"'],
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                  ['*:[bbb xxx]', 'f1:[bbb xxx] f2:[bbb xxx] f3:[bbb xxx]'],
         
     | 
| 
       89 
     | 
    
         
            -
                  ['f1|f2:[bbb xxx]', 'f1:[bbb xxx] f2:[bbb xxx]'],
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                  ['*:(xxx AND bbb)', '+(f1:xxx f2:xxx f3:xxx) +(f1:bbb f2:bbb f3:bbb)'],
         
     | 
| 
       92 
     | 
    
         
            -
                  ['f1|f2:(xxx AND bbb)', '+(f1:xxx f2:xxx) +(f1:bbb f2:bbb)'],
         
     | 
| 
       93 
     | 
    
         
            -
                  ['asdf?*?asd*dsf?asfd*asdf?^20.0', 'asdf?*?asd*dsf?asfd*asdf?^20.0'],
         
     | 
| 
       94 
     | 
    
         
            -
                  ['"onewordphrase"', 'onewordphrase']
         
     | 
| 
       95 
     | 
    
         
            -
                ]
         
     | 
| 
       96 
     | 
    
         
            -
                  
         
     | 
| 
       97 
     | 
    
         
            -
                pairs.each do |query_str, expected|
         
     | 
| 
       98 
     | 
    
         
            -
                  assert_equal(expected, parser.parse(query_str).to_s(parser.default_field))
         
     | 
| 
       99 
     | 
    
         
            -
                end
         
     | 
| 
       100 
     | 
    
         
            -
              end
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
              def test_qp_with_standard_analyzer()
         
     | 
| 
       103 
     | 
    
         
            -
                parser = Ferret::QueryParser.new("xxx", :fields => ["f1", "f2", "f3"],
         
     | 
| 
       104 
     | 
    
         
            -
                                                 :analyzer => Ferret::Analysis::StandardAnalyzer.new)
         
     | 
| 
       105 
     | 
    
         
            -
                pairs = [
         
     | 
| 
       106 
     | 
    
         
            -
                ['key:1234', 'key:1234'],
         
     | 
| 
       107 
     | 
    
         
            -
                  ['key:(1234)', 'key:1234']
         
     | 
| 
       108 
     | 
    
         
            -
                ]
         
     | 
| 
       109 
     | 
    
         
            -
                  
         
     | 
| 
       110 
     | 
    
         
            -
                pairs.each do |query_str, expected|
         
     | 
| 
       111 
     | 
    
         
            -
                  assert_equal(expected, parser.parse(query_str).to_s(parser.default_field))
         
     | 
| 
       112 
     | 
    
         
            -
                end
         
     | 
| 
       113 
     | 
    
         
            -
              end
         
     | 
| 
       114 
     | 
    
         
            -
              
         
     | 
| 
       115 
     | 
    
         
            -
              def do_test_query_parse_exception_raised(str)
         
     | 
| 
       116 
     | 
    
         
            -
                parser = Ferret::QueryParser.new("xxx", :fields => ["f1", "f2", "f3"])
         
     | 
| 
       117 
     | 
    
         
            -
                assert_raise(Ferret::QueryParser::QueryParseException) do
         
     | 
| 
       118 
     | 
    
         
            -
                  parser.parse(str)
         
     | 
| 
       119 
     | 
    
         
            -
                end
         
     | 
| 
       120 
     | 
    
         
            -
              end
         
     | 
| 
       121 
     | 
    
         
            -
             
     | 
| 
       122 
     | 
    
         
            -
              
         
     | 
| 
       123 
     | 
    
         
            -
              def test_bad_queries
         
     | 
| 
       124 
     | 
    
         
            -
                parser = Ferret::QueryParser.new("xxx", :fields => ["f1", "f2"],
         
     | 
| 
       125 
     | 
    
         
            -
                                                        :handle_parse_errors => true)
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
                pairs = [
         
     | 
| 
       128 
     | 
    
         
            -
                  ['::*word', 'word'],
         
     | 
| 
       129 
     | 
    
         
            -
                  ['()*&)(*^&*(', ''],
         
     | 
| 
       130 
     | 
    
         
            -
                  ['()*&one)(*two(*&"', '"one two"']
         
     | 
| 
       131 
     | 
    
         
            -
                ]
         
     | 
| 
       132 
     | 
    
         
            -
                  
         
     | 
| 
       133 
     | 
    
         
            -
                pairs.each do |query_str, expected|
         
     | 
| 
       134 
     | 
    
         
            -
                  do_test_query_parse_exception_raised(query_str)
         
     | 
| 
       135 
     | 
    
         
            -
                  assert_equal(expected, parser.parse(query_str).to_s(parser.default_field))
         
     | 
| 
       136 
     | 
    
         
            -
                end
         
     | 
| 
       137 
     | 
    
         
            -
              end
         
     | 
| 
       138 
     | 
    
         
            -
            end
         
     |