Как сопоставить строку с полями базы данных в Django? - PullRequest
1 голос
/ 16 июля 2010

У меня есть база данных со столбцом name, имеющим такие данные, как

'Very big News'
'News'
'something else'
'New Nes'
'Fresh News'
'Something else'

Теперь, учитывая строку слов, как я могу найти, если какое-либо из слов в данной строке содержится в name поле?

Например:

У меня есть строка 'super very news'.Мне нужно посмотреть в своей базе данных, чтобы узнать, есть ли у меня какая-либо запись, такая, что поле name содержит либо 'super', либо 'very', либо 'news', либо 'super very', либо 'very news'.

.

Ответы [ 2 ]

6 голосов
/ 16 июля 2010

Обновление на основе комментариев.См. Набор запросов docs здесь .

your_search_query = 'super very news'

qset = Q()
for term in your_search_query.split():
    qset |= Q(name__contains=term)

matching_results = YourModel.objects.filter(qset)

Это создает эквивалент:

matching_result = YourModel.objects.filter(Q(name__contains='super') |
                                           Q(name__contains='very') |   
                                           Q(name__contains='news'))

, который производит (примерно) следующий SQL в одном запросе:

 select * from your_model where name like '%super%' or name like '%very%' or name like '%news%'
0 голосов
/ 17 июля 2010

Если ваш список слов небольшой и простой, вы можете написать свою собственную таблицу поиска и индексатор, в противном случае вам нужна полнотекстовая база данных, такая как OpenFTS:

http://openfts.sourceforge.net/

...