先定义一个model:
#newtest/wiki/person.pyfrom django.db import modelsclass Person(models.Model): first_name = models.CharField(maxlength=30) last_name = models.CharField(maxlength=30) biography = models.TextField() class Meta: db_table = 'person'测试search api:
#newtest/wiki/test_searchapi.pyimport osworking_directory = os.getcwd()project_directory = os.path.dirname(working_directory)import syssys.path.append(os.path.dirname(project_directory))from django.core.management import setup_environfrom newtest import settingssetup_environ(settings)from django.contrib.search.backends import LuceneIndexerfrom newtest.wiki.person import Person#b = Person(first_name='Brian', last_name='Beck', biography='Python advocate')#g = Person(first_name='Guido', last_name='van Rossum', biography='Python creator')#s = Person(first_name='Spiros', last_name='Eliopoulos', biography='Loves Haskell')indexer = LuceneIndexer('/tmp/person-index', Person, fields=['Person.biography'], attributes={'first': 'Person.first_name', 'last': 'Person.last_name'})indexer.update()for hit in indexer.search('python'): print hit, hit.instanceprint "------"for hit in indexer.search('python creator'): print hit, hit.instanceprint "------"for hit in indexer.search('last:Beck OR first:Spiros'): print hit, hit.instance假设person表中的数据为:
+----+------------+------------+-----------------+| id | first_name | last_name | biography |+----+------------+------------+-----------------+| 1 | Brian | Beck | Python advocate || 2 | Guido | van Rossum | Python creator || 4 | Spiros | Eliopoulos | Loves Haskell |+----+------------+------------+-----------------+输出结果为:
<LuceneHit: wiki.person 1, Score: 0.625> Person object<LuceneHit: wiki.person 2, Score: 0.625> Person object------<LuceneHit: wiki.person 2, Score: 1.0> Person object<LuceneHit: wiki.person 1, Score: 0.168048456311> Person object------<LuceneHit: wiki.person 1, Score: 0.496906995773> Person object<LuceneHit: wiki.person 4, Score: 0.496906995773> Person object
|