I was reading through the Pythonic Extensions section of the README
while porting it to the wiki, and I though I remembered one of them
having caused an error a while back. I didn't have a change to
investigate at the time.
Now I do, so I've whipped up a test script that tests out the various
pieces of code in the Pythonic Extensions section. Extensions 3 and 4
fail for me:
---
[EMAIL PROTECTED] ~/proj/search/trunk]$ bin/tmp.py 3
PyLucene 2.1.0-1 Lucene 2.1.0-509013
Traceback (most recent call last):
File "bin/tmp.py", line 48, in <module>
main()
File "bin/tmp.py", line 31, in main
print len(reader)
TypeError: object of type 'PyLucene.IndexReader' has no len()
[EMAIL PROTECTED] ~/proj/search/trunk]$ bin/tmp.py 4
PyLucene 2.1.0-1 Lucene 2.1.0-509013
Hail To The Thief
Traceback (most recent call last):
File "bin/tmp.py", line 48, in <module>
main()
File "bin/tmp.py", line 40, in main
print doc.title
AttributeError: 'PyLucene.Document' object has no attribute 'title'
---
The script:
---
#!/bin/env python2.5
import sys
import PyLucene
def main():
print 'PyLucene', PyLucene.VERSION, 'Lucene', PyLucene.LUCENE_VERSION
directory = '/tmp/crash'
store = PyLucene.RAMDirectory()
analyzer = PyLucene.StandardAnalyzer()
writer = PyLucene.IndexWriter(store, analyzer, True)
doc = PyLucene.Document()
doc.add(PyLucene.Field('title', 'Hail To The Thief',
PyLucene.Field.Store.YES, PyLucene.Field.Index.TOKENIZED))
writer.addDocument(doc)
writer.close()
reader = PyLucene.IndexReader.open(store)
searcher = PyLucene.IndexSearcher(store)
parser = PyLucene.QueryParser('title', analyzer)
hits = searcher.search(parser.parse('thief'))
# "Hits instances are iterable in Python."
if sys.argv[1] == '1':
for i, doc in hits:
print hits.score(i), ':', doc['title']
# "Hits instances partially implement the Python 'list' protocol."
elif sys.argv[1] == '2':
print len(hits)
doc = hits[0]
print doc
# IndexReader? instances partially implement the 'list' protocol and
can be iterated over for their documents.
elif sys.argv[1] == '3':
print len(reader)
doc = reader[0]
print doc
for i, doc in reader:
print doc['title']
# Document instances have fields whose values can be accessed
through the dict and attribute protocol.
elif sys.argv[1] == '4':
for i, doc in reader:
print doc['title']
print doc.title
del doc.title
# Document instances can be iterated over for their fields
elif sys.argv[1] == '5':
for i, doc in reader:
for field in doc:
print field
main()
---
-ofer
_______________________________________________
pylucene-dev mailing list
[email protected]
http://lists.osafoundation.org/mailman/listinfo/pylucene-dev