170 похожих чатов

У меня есть наследуемые модели, город-адрес-дом-квартира, как лучше адекватный поиск

по нескольким полям в каждой модели замутить? через search engine, full text search (медленно работает почему то) или просто фильтрами regex или icontains?

12 ответов

18 просмотров

Elastic search можешь заюзать

Пользователь-60feb Автор вопроса

спасибо! а не в курсе, мне надо поля собрать в одну строку шаблоном и индексировать? или по отдельности каждое поле в шаблоне

SearchVectorField, но, да, надо забороть его медленность. (сам пока не добрался). Ну, или внешние индексы: эластик, солр и иже с ними.

Пользователь-60feb Автор вопроса

Посмотрел доку по постргресу, вроде должно быстро работать, попробую raw и отпишусь попозже

Тоже почитать: https://www.paulox.net/2017/12/22/full-text-search-in-django-with-postgresql/

Пользователь-60feb Автор вопроса

Спасибо большое! оказывается надо SearchVectorField создавать (If we want to speed up and simplify the query execution we can add a “search vector field” to the model and then execute searches on this specific field.) пойду траить

Трайте) тока сразу предупреждаю, fk через "__" не получится как обычно: Model.objects.filter (id=self.id).update ( search_vector =Subquery (Model.objects.filter (id=OuterRef ('id')).annotate ( search_vector_name=SearchVector ( "field1", "field2", 'field3__name', 'field4__name', 'field5__name', ).values ('search_vector_name') [:1]) ) search_vector - SearchVectorField И все это нужно делать ПОСЛЕ super(Model, self).save(*args, **kwargs)

Пользователь-60feb Автор вопроса

спасибо Большое ещё раз! повсюду подводные камни ) А Вы реализовывали поиск адреса в одну строку по связанным моделям (может быть вектор всё-таки не очень хорошо тут). я сейчас как раз запихал фиас в джангу, в дальнейшим привязать к своим таблицам с геометрией. Судя по нику Вы должны знать ответ )

Нет, не должен) вообще, поиск по адресу это история про реверс геокодинг, и это, да, другое.

Пользователь-60feb Автор вопроса

оке) попробую через вектор, не очень нравится, что помимо ES еще и drf какое ту приблуду натягивать надо. иначе там единая точка входа

Я в этом смысле - ленивая ж*па: https://github.com/DenisCarriere/geocoder

Пользователь-60feb Автор вопроса

прикольно, спасибо ) это следующий этап

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта