xapian-fu 1.5.2 → 1.5.3
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.
- checksums.yaml +8 -8
- data/CHANGELOG.rdoc +4 -0
- data/lib/xapian_fu/version.rb +1 -1
- data/lib/xapian_fu/xapian_db.rb +3 -0
- data/lib/xapian_fu/xapian_doc.rb +24 -10
- data/spec/xapian_db_spec.rb +17 -0
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            !binary "U0hBMQ==":
         | 
| 3 3 | 
             
              metadata.gz: !binary |-
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                YTU3ZmE1ZDAxMjgwZWQ1OTgzMDRlNGIwYWUwZTAyNmE3ODRlMTY3NQ==
         | 
| 5 5 | 
             
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                OWYzOTNiYjVmOTMzZTVjNDZhYWU5MjQ1NDMzMzM3ZWM1OTlkMzA4NQ==
         | 
| 7 7 | 
             
            !binary "U0hBNTEy":
         | 
| 8 8 | 
             
              metadata.gz: !binary |-
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 9 | 
            +
                MTZhNWNjMmY1ZGI2ODIwNjM1ZTdmNTRjNjNjMzczYzNmOGY1OTg4NjA1NzM2
         | 
| 10 | 
            +
                N2E4MThmZDU2ZGRiYjFkYmJlMjg4NjExMmM3NGZlM2UzZmFhZWNlOTk3YTIy
         | 
| 11 | 
            +
                MTAzYmU3ZDA1ZjRiODk1OGY0ZTJkZWVhMDMyMjM3NjI4OWE0M2Y=
         | 
| 12 12 | 
             
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 13 | 
            +
                NmVlMzRlZGNlMmVjNjkwMjYzMzliNmM2OTY5MWE5ZjZkZDM1Y2QxMGU5OGI5
         | 
| 14 | 
            +
                NzU2M2MzYjkxYzljMWEwZGRmYjk0Mjc3MzY1ODlhNzdjMmFiMzg2ODZjZmYw
         | 
| 15 | 
            +
                MTJiYjc1ZTZjZTc5Nzk3NDgxZjFlOWZkMTU4ZmZhYjNjNmM3YjM=
         | 
    
        data/CHANGELOG.rdoc
    CHANGED
    
    
    
        data/lib/xapian_fu/version.rb
    CHANGED
    
    
    
        data/lib/xapian_fu/xapian_db.rb
    CHANGED
    
    | @@ -137,6 +137,7 @@ module XapianFu #:nodoc: | |
| 137 137 | 
             
                # Whether this db will generate a spelling dictionary during indexing
         | 
| 138 138 | 
             
                attr_reader :spelling
         | 
| 139 139 | 
             
                attr_reader :sortable_fields
         | 
| 140 | 
            +
                attr_reader :field_options
         | 
| 140 141 | 
             
                attr_accessor :weights_function
         | 
| 141 142 | 
             
                attr :field_weights
         | 
| 142 143 |  | 
| @@ -151,6 +152,7 @@ module XapianFu #:nodoc: | |
| 151 152 | 
             
                  @language = @options.fetch(:language, :english)
         | 
| 152 153 | 
             
                  @stemmer = @options.fetch(:stemmer, @language)
         | 
| 153 154 | 
             
                  @stopper = @options.fetch(:stopper, @language)
         | 
| 155 | 
            +
                  @field_options = {}
         | 
| 154 156 | 
             
                  setup_fields(@options[:fields])
         | 
| 155 157 | 
             
                  @store_values << @options[:store]
         | 
| 156 158 | 
             
                  @store_values << @options[:sortable]
         | 
| @@ -444,6 +446,7 @@ module XapianFu #:nodoc: | |
| 444 446 | 
             
                    @boolean_fields << name if opts[:boolean]
         | 
| 445 447 | 
             
                    @fields[name] = opts[:type]
         | 
| 446 448 | 
             
                    @field_weights[name] = opts[:weight] if opts.include?(:weight)
         | 
| 449 | 
            +
                    @field_options[name] = opts
         | 
| 447 450 | 
             
                  end
         | 
| 448 451 | 
             
                  @fields
         | 
| 449 452 | 
             
                end
         | 
    
        data/lib/xapian_fu/xapian_doc.rb
    CHANGED
    
    | @@ -268,19 +268,33 @@ module XapianFu #:nodoc: | |
| 268 268 | 
             
                  tg.stemmer = stemmer
         | 
| 269 269 | 
             
                  tg.set_flags Xapian::TermGenerator::FLAG_SPELLING if db.spelling
         | 
| 270 270 | 
             
                  index_method = db.index_positions ? :index_text : :index_text_without_positions
         | 
| 271 | 
            -
                  fields.each do |k, | 
| 271 | 
            +
                  fields.each do |k,o|
         | 
| 272 272 | 
             
                    next if unindexed_fields.include?(k)
         | 
| 273 | 
            -
             | 
| 274 | 
            -
             | 
| 273 | 
            +
             | 
| 274 | 
            +
                    if db.fields[k] == Array
         | 
| 275 | 
            +
                      values = Array(o)
         | 
| 275 276 | 
             
                    else
         | 
| 276 | 
            -
                       | 
| 277 | 
            +
                      values = [o]
         | 
| 278 | 
            +
                    end
         | 
| 279 | 
            +
             | 
| 280 | 
            +
                    values.each do |v|
         | 
| 281 | 
            +
                      if v.respond_to?(:to_xapian_fu_string)
         | 
| 282 | 
            +
                        v = v.to_xapian_fu_string
         | 
| 283 | 
            +
                      else
         | 
| 284 | 
            +
                        v = v.to_s
         | 
| 285 | 
            +
                      end
         | 
| 286 | 
            +
             | 
| 287 | 
            +
                      # get the custom term weight if a weights function exists
         | 
| 288 | 
            +
                      weight = db.weights_function ? db.weights_function.call(k, v, fields).to_i : db.field_weights[k]
         | 
| 289 | 
            +
                      # add value with field name
         | 
| 290 | 
            +
                      tg.send(index_method, v, weight, 'X' + k.to_s.upcase)
         | 
| 291 | 
            +
                      # add value without field name
         | 
| 292 | 
            +
                      tg.send(index_method, v, weight)
         | 
| 293 | 
            +
             | 
| 294 | 
            +
                      if db.field_options[k] && db.field_options[k][:exact]
         | 
| 295 | 
            +
                        xapian_document.add_term("X#{k.to_s.upcase}#{v.to_s.downcase}", weight)
         | 
| 296 | 
            +
                      end
         | 
| 277 297 | 
             
                    end
         | 
| 278 | 
            -
                    # get the custom term weight if a weights function exists
         | 
| 279 | 
            -
                    weight = db.weights_function ? db.weights_function.call(k, v, fields).to_i : db.field_weights[k]
         | 
| 280 | 
            -
                    # add value with field name
         | 
| 281 | 
            -
                    tg.send(index_method, v, weight, 'X' + k.to_s.upcase)
         | 
| 282 | 
            -
                    # add value without field name
         | 
| 283 | 
            -
                    tg.send(index_method, v, weight)
         | 
| 284 298 | 
             
                  end
         | 
| 285 299 |  | 
| 286 300 | 
             
                  db.boolean_fields.each do |name|
         | 
    
        data/spec/xapian_db_spec.rb
    CHANGED
    
    | @@ -289,6 +289,23 @@ describe XapianDb do | |
| 289 289 | 
             
                  xdb.search("red").map(&:id).should == [1, 2]
         | 
| 290 290 | 
             
                end
         | 
| 291 291 |  | 
| 292 | 
            +
                it "should index arrays with exact option" do
         | 
| 293 | 
            +
                  xdb = XapianDb.new(:dir => tmp_dir, :create => true,
         | 
| 294 | 
            +
                                     :fields => {
         | 
| 295 | 
            +
                                       :colors => { :index => true, :type => Array, :exact => true }
         | 
| 296 | 
            +
                                     })
         | 
| 297 | 
            +
             | 
| 298 | 
            +
                  xdb << {:colors => ["light blue", "red"]}
         | 
| 299 | 
            +
             | 
| 300 | 
            +
                  xdb.flush
         | 
| 301 | 
            +
             | 
| 302 | 
            +
                  doc = xdb.documents.find(1)
         | 
| 303 | 
            +
             | 
| 304 | 
            +
                  terms = doc.terms.map(&:term)
         | 
| 305 | 
            +
             | 
| 306 | 
            +
                  terms.should include("XCOLORSlight blue")
         | 
| 307 | 
            +
                  terms.should include("XCOLORSred")
         | 
| 308 | 
            +
                end
         | 
| 292 309 | 
             
              end
         | 
| 293 310 |  | 
| 294 311 | 
             
              describe "search" do
         |