2013-11-18 1 views
1

Я использую Web.py и sqlite3.I есть каталог библиотеки, хранящейся в базе данных со следующей схемойразделенных запятыми Multiple поиск по ключевым словам

booklog(id,book_name,author,genre,language)

Я хочу искать через базу данных с помощью одного текстового поля. например, если я нахожу XYZ, я получаю все результаты, в которых XYZ возникает, как имя автора/книги/genre. Я получаю этот результат с простым запросом с OR. Проблема, которую я имею сейчас, - это когда я хочу искать несколько ключевых слов, разделенных через запятую через одно и то же текстовое поле. Результат должен состоять из строк с двумя ключевыми словами, за которыми следует одно ключевое слово.

Я могу разделить ключевые слова, чтобы список и поиск .Но я не сортировать таблицу с нисходящим нет матчей, также сортировки NoCase не работает в списке:

inp=web.input() 
key=inp.search.split(',') 
myvar=dict(t=key) 
result=db.query("select * from booklog where book_name in $t collate nocase or author in $t collate nocase or genre in $t collate nocase ",myvar) 
return render.bookview(result) 

Есть ли другой способ сделать это в web.py? Я относительно новичок в python/web.py/sqlite3

ответ

1

Вы бы хотели использовать полнотекстовую поисковую систему, такую ​​как Solr. Двигатели, такие как это, автоматически оценивают результаты так, как вы хотите.

Если вы все еще хотите сделать это с только sqlite3, есть посмотреть на его Full Text Search Extension

В частности, обратите внимание на Разговорники запросов в this section. При поддержке фразовых запросов вам не нужно даже разбивать строку ввода на списки.

+0

да, я хочу делать с sqlite3.the FTS, но не упоминает о совпадении в списке. Сколько вам спасибо за быстрый ответ. :) – Rishin

+0

Вы не используете список с FTS. Вы напрямую ищете строку. Настройка таблиц FTS - это то, что требует усилий с вашей стороны. – Chandranshu

+0

@Rishin - см. Мой обновленный ответ и, пожалуйста, прочитайте этот раздел. – Chandranshu

 Смежные вопросы

  • Нет связанных вопросов^_^