Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Sphinx принципиально не имеет средств по наполнению индексов (что по одной, что по нескольким таблицам/моделям) на лету.
в) если несколько моделей имеют схожую структуру, то опять же их индексировать вместе не обязательно — сфинкс умеет искать по нескольким индексам и отдавать данные скопом. единственное требование тут — одинаковые поля у всех моделей (как SQL UNION)
Да, я понял. Но функционал по полной переиндексации нужно реализовывать самому?
def Search(self, *args):
....
def Snippets(self, index, data, query):
....
Sphinxit = SphinxConnector(**settings.SPHINXIT_CONNECTION)
SphinxSearch = Sphinxit.Search
...
def get_sphinx_query(self):
query = (SphinxSearch(*self.search_indexes).match(self.query)
.limit(self.get_offset(), self.paginate_by))
self.apply_filters_to_sphinx_query(query)
self.apply_sortings_to_sphinx_query(query)
return query
...
...
search_result = self.get_sphinx_query().process()
self.sphinx_result = search_result['result']
self.total_found = int(search_result['meta']['total_found'])
...
WHERE clause. This clause will map both to fulltext query and filters. Comparison operators (=, !=, <, >, <=, >=), IN, AND, NOT, and BETWEEN are all supported and map directly to filters. OR is not supported yet but will be in the future.
SELECT id, (id=1) OR (id>=5) AS cnd FROM index WHERE MATCH('Hello') AND cnd>0;
SELECT * FROM index; SELECT * FROM index ORDER BY field;
SELECT some_field FROM index; SELECT some_field FROM index ORDER BY field;
Как подружить Django и Sphinx?