Джанго простой подход к многопольному поиску - PullRequest
1 голос
/ 28 апреля 2010

У меня есть простое приложение адресной книги, которое я хочу сделать доступным для поиска. Модель будет выглядеть примерно так:

class Address(models.Model):
    address1 = models.CharField("Address Line 1", max_length=128)
    address2 = models.CharField("Address Line 2", max_length=128)
    city     = models.CharField("City", max_length=128)
    state    = models.CharField("State", max_length=24)
    zipCode  = models.CharField("Zip Code", max_length=24)

    def __unicode__(self):
        return "%s %s, %s, %s, %s" % (self.address1, self.address2, self.city, self.state, self.zipCode)

class Entry(models.Model):
    name      = models.CharField("Name of Business", max_length=128)
    createdBy = models.ForeignKey(User)
    address   = models.ForeignKey(Address, unique=True)

    def __unicode__(self):
        return "%s - %s, %s" % (self.name, self.address.city, self.address.state)

Я хочу, чтобы поиск был довольно свободным, например: Bank of America Los Angeles 91345. Кажется, что я хочу поле, которое содержит все эти элементы в одном, что я могу искать, но это также кажется избыточным. Я надеялся, что смогу добавить метод к модели Entry следующим образом:

def _getSearchText(self):
    return "%s %s %s" % (self.name, self.address, self.mascot)
searchText = property(_getSearchText)

... и ищите это как поле, но я полагаю, это желаемое за действительное ... Как мне подходить к этому, используя базовые Django и SqLite (это упражнение для обучения).

Спасибо !!

1 Ответ

2 голосов
/ 28 апреля 2010

Если вы занимаетесь чем-то большим, чем просто базовый поиск, вам нужна надлежащая полнотекстовая поисковая система для баз данных.

Что-то вроде джанго-сфинкса может быть ответом. http://github.com/dcramer/django-sphinx

Если вы действительно делаете это только для того, чтобы связываться с django, одним из чрезвычайно простых решений является получение всех результатов и использование регулярных выражений для определения ваших совпадений. Очевидно, это ужасное решение.

Лучшим решением было бы создание фильтра, добавляющего условия поиска в запрос программным способом.

https://docs.djangoproject.com/en/dev/ref/models/querysets/#filter

https://docs.djangoproject.com/en/dev/ref/models/querysets/#contains

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...