PyLucene 3.4.0-1 import
[pylucene.git] / test / test_DocBoost.py
1 # ====================================================================
2 #   Licensed under the Apache License, Version 2.0 (the "License");
3 #   you may not use this file except in compliance with the License.
4 #   You may obtain a copy of the License at
5 #
6 #       http://www.apache.org/licenses/LICENSE-2.0
7 #
8 #   Unless required by applicable law or agreed to in writing, software
9 #   distributed under the License is distributed on an "AS IS" BASIS,
10 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 #   See the License for the specific language governing permissions and
12 #   limitations under the License.
13 # ====================================================================
14
15 from unittest import TestCase, main
16 from lucene import *
17
18
19 class DocBoostTestCase(TestCase):
20     """
21     Unit tests ported from Java Lucene
22     """
23   
24     def testDocBoost(self):
25
26         store = RAMDirectory()
27         writer = IndexWriter(store, SimpleAnalyzer(), True,
28                              IndexWriter.MaxFieldLength.LIMITED)
29     
30         f1 = Field("field", "word", Field.Store.YES, Field.Index.ANALYZED)
31         f2 = Field("field", "word", Field.Store.YES, Field.Index.ANALYZED)
32         f2.setBoost(2.0)
33     
34         d1 = Document()
35         d2 = Document()
36         d3 = Document()
37         d4 = Document()
38         d3.setBoost(3.0)
39         d4.setBoost(2.0)
40     
41         d1.add(f1)                                 # boost = 1
42         d2.add(f2)                                 # boost = 2
43         d3.add(f1)                                 # boost = 3
44         d4.add(f2)                                 # boost = 4
45     
46         writer.addDocument(d1)
47         writer.addDocument(d2)
48         writer.addDocument(d3)
49         writer.addDocument(d4)
50         writer.optimize()
51         writer.close()
52
53         scores = [0.0] * 4
54
55         class collector(PythonCollector):
56             def __init__(_self, scores):
57                 super(collector, _self).__init__()
58                 _self.scores = scores
59                 _self.base = 0
60             def collect(_self, doc, score):
61                 _self.scores[doc + _self.base] = score
62             def setNextReader(_self, reader, docBase):
63                 _self.base = docBase
64             def acceptsDocsOutOfOrder(_self):
65                 return True
66
67         IndexSearcher(store, True).search(TermQuery(Term("field", "word")),
68                                           collector(scores))
69     
70         lastScore = 0.0
71         for score in scores:
72             self.assert_(score > lastScore)
73             lastScore = score
74
75
76 if __name__ == "__main__":
77     import sys, lucene
78     lucene.initVM()
79     if '-loop' in sys.argv:
80         sys.argv.remove('-loop')
81         while True:
82             try:
83                 main()
84             except:
85                 pass
86     else:
87          main()