RkBlog

Hardware, programming and astronomy tutorials and reviews.

Djapian - integracja pełnotekstowej wyszukiwarki Xapian z Django

Opis komponentu Django integrującego wyszukiwarkę Xapian z modelami Django.

Djapian to komponent integrujący pełnotekstową wyszukiwarkę Xapian z Django. Djapian umożliwia tworzenie "modeli", które służą do indeksowania i wyszukiwania danych - np z powiązanego modelu.

Instalacja

Indeksowanie i wyszukiwanie danych

Oto przykładowy model Django:
class Content(models.Model):
	title = models.CharField(max_length=255, verbose_name=_('Title'))
	slug = models.SlugField(max_length=255, unique=True, verbose_name=_('Slug'))
	description = models.TextField(verbose_name=_('Description'))
	text = models.TextField(verbose_name=_('Text'), blank=True)
Żeby móc wyszukiwać dane z tego modelu należy stworzyć model Djapiana i przypisać do tego modelu:
class ContentIndexer(djapian.Indexer):
	fields=["text"]
	tags=[
		("title",   "title"),
		("slug", "slug"),
		("description", "description")
	]
	
djapian.add_index(Content, ContentIndexer, attach_as="indexer")

Model Djapiana to klasa dziedzicząca djapian.Indexer. Atrybut fields zawiera listę pól jakie mają być użyte do stworzenia ogólnego indeksu. Atrybut tags zawiera listę dwuelementowych (opcjonalnie 3-elementowych) list klucz-nazwa_pola. Tagi pozwalają na precyzyjne wyszukiwanie po danym polu (a nie po indeksie głównym zdefiniowanym w fields).

Po zdefiniowaniu modelu Djapiana przypisujemy go do danego modelu Django:

djapian.add_index(MODEL_DJANGO, MODEL_DJAPIANA, attach_as="NAZWA_INDEKSU")
Reindeksacja (pierwsze indeksowanie) wszystkich danych można przeprowadzić za pomocą:
Content.indexer.update()
MODEL.NAZWA_INDEKSU.update()
Wyszukiwanie wygląda następująco:
result = Content.indexer.search('python')
# przykład wyszukiwania dla taga
#result = Content.indexer.search('description:python')
for i in result:
	# wyświetlenie danych ze znalezionego wpisu
	print i.instance.title
	# procentowa ocena trafności
	print i.percent
	print

Szczegółowe informacje odnośnie aktualizowania indeksów i dodatkowej konfiguracji znajdziemy na stronie projektu.
RkBlog

24 February 2009;

Comment article