All streams
Search
Write a publication
Pull to refresh
162
0

Software Engineer

Send message
Исходники, да ещё и в одном модуле (ну кто так делает) меня смутили. Хотя не видел ещё ORM с нормальным кодом под капотом, везде макароны и магия.
Аналогичный пример, только с другой выборкой:

SELECT *, (id>=100 OR id=1) AS cnd FROM company WHERE cnd>0


Works fine for me. В Sphinxit реализовал этот workaround как OR-объект. sphinxit.readthedocs.org/en/latest/usage.html#or-objects
Я, скорее всего, поеду. Правда, пока не знаю на чём.
Спасибо за проделанную работу. С большим удовольствием почитаю продолжение, подобный материал на вес золота.

P.S. Buruki — это такой локализованный и адаптированный GetGoing?
Этот чувак реально ненавидит свой ноутбук.
Будет. Хотя пока непонятно в каком виде. Вы хотите, чтобы конфиг автоматом создавался? И чтобы ротация индексов на post_save сигналах отрабатывала? Sphinxit хоть сейчас можно использовать в Django, как и в любом другом фреймворке (в том-то и прелесть). В общем, пишите хотелки мне на GitHub.
Я вас умоляю, не надо использовать django-sphinx. Он сильно-сильно legacy, untested и buggy. Я уже писал об этом как-то. А, поскольку, нормального решения под Python-приложения не было, я разработал Sphinxit. Попробуйте.

GitHub: github.com/semirook/sphinxit
Слайды с доклада по теме: speakerdeck.com/semirook/poisk-sphinx
А я для растра Pixelmator юзаю, бесконечно приятная вещь. С вектором там почти никак, но ему это и ни к чему. Рекомендую всем маководам вместо Фотошопа (я уверен, большинство из вас только картинки в нём обрезает).
Решение проблемы простое, если проблема вообще есть.

Во первых, не смотря ни на что, люди продолжают ходить в кинотеатры. Это основной доход киноиндустрии, западные фильмы вообще зарабатывают сотни миллионов на прокате, несмотря на то, что «экранки» доступны — бери, качай. Продажи DVD, сувенирок — это уже дополнительные мелочи (тоже миллионы, но суммы не такие внушительные). Это я к тому, что, может, проблемы нет?

Во-вторых, наша творческая интеллигенция сидит в каком-то танке и едет в нём против часовой стрелки. Распространение информации изменилось, есть платформы для легальной продажи контента. В «этой стране» © нет, конечно, такого изобилия как в более развитых странах, но это следствие как раз бестолковости этих самых режиссёров, музыкантов и писателей. Русский (молчу про украинский) iTunes Store — жалкое зрелище, увы. Ну так мы же любим всё национальное? Запилите хороший магазин, продавайте в нём свой контент. Не надо ныть, не надо цепляться за прошлое со своими бумажными книгами и музыкой на дисках.

Люди не покупают книги, потому-что их или негде купить, или бумажные версии стоят каких-то невообразимых денег. А в это время у каждого второго есть планшет или ридер. Помните недавно вышел новый альбом Земфиры? Как толково его по интернетам попиарили? Купить было просто, стоило смешных денег, рублей 100, вроде. Распространение через Яндекс.Музыку и iTunes. В итоге — альбом установил рекорд по доходам.

В общем, чего ныть? Просто меняйте каналы распространения, переезжайте в онлайн, тут есть деньги, есть платежеспособная публика. Телевидение, радио, газеты, журналы — умирают. Смиритесь, меняйтесь, это нормально.
Не страшно, если попросит. Не думаю, что это будет дорого и я готов платить за Диск. К тому же, на самом деле мне надо временно похранить где-то бэкап на 35 гиг, как раз влезло, SSD на ноуте не резиновый. Через месяц где-то заберу обратно.

Всё, что мне надо хранить в облаке — некоторые документы, книги, брелки, что-то архиважное. А такого архиважного гиг 5 от силы. Но даже если и понадобится — я лучше буду платить Яндексу :)
8 гиг со старта, потом подключил айфон к ноуту, а Диск мне такой: «О, фотки, давай я их залью и дам тебе 32 гига ещё?» Вот так просто.
Яндекс.Диск дал мне 40 гиг, в общей сложности. И есть не просит.
Раньше я, кстати, именно так и оформлял. Но если кто-то вставит что-то в первую строку, например, но во время мёржа мне приходилось внимательно перечитывать свой вариант, конфликтный вариант и руками копировать недостающие объекты, вместо того, чтобы кликнуть на строке, которая должна подставиться сама.
Да, разумеется «более говорящее». Все совпадения случайны :)
Там есть более просто решение:

SELECT id, (id=1) OR (id>=5) AS cnd FROM index WHERE MATCH('Hello') AND cnd>0;


Но соединять через OR MVA-атрибуты нельзя, вот в этом случае иначе как ручками я способа не знаю.
Кстати, вы решили как-то проблему фильтрации выдачи через OR? Вот из доки Сфинкса фрагмент:
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.

Меня нехило это пробесило, пришлось долго гуглить, чтобы найти хак, который в итоге стал Q-объектом в Sphinxit. Но соединять таким образом MVA-атрибуты всё равно нельзя. Вот я по сей день думаю, как же так?!
RT-индексы будут, просто не было повода добавить их поддержку раньше, нигде не использовал. Основной индекс + дельта хорошо себя ведут, хотя несколько раз хотелось «бросить всё к чёрту и уехать в Кисловодск», то есть переписать реализацию на RT-индексах.

С заглавной, так как это функция-фабрика и я захотел подчеркнуть таким образом точку входа. В реальном проекте выглядит как:

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'])
...


Есть места, которые мне не нравятся и ещё массу всего нужно доделать и переделать. Но даже в текущем состоянии вполне неплохо зарекомендовавший себя в продакшене продукт получился. Надо как-то взять себя в кулак и таки дописать документацию с примерами :)
О, брат :) github.com/semirook/sphinxit. Дописать документацию всё никак руки не дойдут, но в коде много комментариев, можно разобраться (вообще это был внутренний проект). Поддержка свежего SphinxQL, Python 2 и 3, есть тесты. Не решаем ли мы одну и ту же задачу? Правда я изначально не хотел привязываться к фреймворку, поэтому Sphinxit можно использовать в любом python-проекте. Интеграцию лучше каким-то addon`ом уже выпустить, типа интроспекция моделей и обновление дельта-индексов по post-save сигналу.
Сделайте монохромные иконки для тёмной темы, станет ещё лучше.
Полезли с коллегой исходники смотреть… Образцово-показательный говнокод. Нет, спасибо, забирайте обратно.

Information

Rating
Does not participate
Location
London, England - London, Великобритания
Date of birth
Registered
Activity