|
Не строгий поиск по нескольким словам в запросе 1с | ☑ | ||
---|---|---|---|---|
0
tabarigen
05.02.19
✎
09:59
|
Здравствуйте ребята.
подскажите пожалуйста по сабжу. На питоне я это делал так. if query: result = Pill.objects. \ filter(reduce(lambda x, y: x & y, [Q(title__icontains=word) for word in query]), is_active=True, last_update__gte=search_time). \ values('title', 'pharmacy__title', 'pharmacy__phone_number', 'balance', 'price'). \ order_by("title")[:300] Есть ли вариант организовать что то подобное на 1с? В настоящий момент работает простой поиск. ГДЕ Номен.Наименование ПОДОБНО &СтрокаПоиска + ""%"" |
|||
1
Гипервизор
05.02.19
✎
10:01
|
Незнакомым с питоном людям ваш опус сильно поможет вникнуть в суть вопроса.
|
|||
2
tabarigen
05.02.19
✎
10:10
|
(1) суть вопроса в заголовке
|
|||
3
Ёпрст
05.02.19
✎
10:13
|
(0) используй like в тексте запроса
|
|||
4
tabarigen
05.02.19
✎
10:32
|
(3) разве ПОДОБНО не есть аналог LIKE?
|
|||
5
catena
05.02.19
✎
10:56
|
(4)Есть. Самый простой нестрогий поиск: "лайкнуть" на каждое слово и посчитать рейтинг совпадений. Это если слова целиком искать.
|
|||
6
Вафель
05.02.19
✎
10:57
|
нужно title содержит одно из слов в списке?
|
|||
7
tabarigen
05.02.19
✎
11:04
|
(6) нет чтоб слова в списке содержались в title
Например есть наименование Тетрациклиновая мазь туба 1% 10 гр. гл. мазь нужно чтоб можно было найти по сочетанию тетрацик мазь 10 |
|||
8
wowik
05.02.19
✎
11:05
|
(7) подобно %тетрацик%
и подобно %мазь% подобно %10% |
|||
9
tabarigen
05.02.19
✎
11:06
|
(8) да ладно.. так работает че ле
|
|||
10
wowik
05.02.19
✎
11:06
|
(9) а то!
|
|||
11
tabarigen
05.02.19
✎
11:06
|
(10) ща попробую
|
|||
12
Вафель
05.02.19
✎
11:09
|
если порядок нужен, то можно
тетрацик%мазь |
|||
13
tabarigen
05.02.19
✎
11:12
|
(12) порядок не важен
|
|||
14
aleks_default
05.02.19
✎
11:47
|
Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.
Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки: % (процент): последовательность, содержащая любое количество произвольных символов _ (подчеркивание): один произвольный символ […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона. [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ. Например, шаблон “%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем перед этой последовательностью может располагаться произвольный набор символов. |
|||
15
tabarigen
05.02.19
✎
11:59
|
Всем спасибо большое.
Очень помогли. Пока сделал так. Правда мне лаконичность кода не очень нравится. &НаСервере Процедура ОбновитьТаблицуОстатков() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 200 | Номен.Ссылка КАК Номенклатура, | ТоварыНаСкладахОстатки.Характеристика КАК Серия, | ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток, | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена |ИЗ | Справочник.Номенклатура КАК Номен | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &РозничныйСклад) КАК ТоварыНаСкладахОстатки | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ВидЦены = &Розничная) КАК ЦеныНоменклатурыСрезПоследних | ПО ТоварыНаСкладахОстатки.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика | ПО Номен.Ссылка = ТоварыНаСкладахОстатки.Характеристика.Владелец |ГДЕ |"; СтрокаПоиск = СфориироватьСтрокуПоиска(); Запрос.Текст = Запрос.Текст + СтрокаПоиск + " |УПОРЯДОЧИТЬ ПО | Остаток УБЫВ"; Запрос.УстановитьПараметр("Розничная", Объект.ВидЦенПродажи); Запрос.УстановитьПараметр("РозничныйСклад", Объект.СкладПродажи); Запрос.УстановитьПараметр("СтрокаПоиска", ПолеПоиска); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); ОстаткиТоваров.Загрузить(РезультатЗапроса); КонецПроцедуры Функция СфориироватьСтрокуПоиска() МассивСлов = СтрРазделить(ПолеПоиска, " ", Ложь); СтрокаПоиска = ""; сч = 0; КоличествоСлов = МассивСлов.Количество(); Для Каждого стр Из МассивСлов Цикл сч = сч + 1; СтрокаПоиска = СтрокаПоиска + "Номен.Наименование ПОДОБНО " + """%" + стр+ "%"""; Если НЕ (КоличествоСлов - сч) = 0 Тогда СтрокаПоиска = СтрокаПоиска + " И "; КонецЕсли; КонецЦикла; Возврат СтрокаПоиска; КонецФункции |
|||
16
Сияющий в темноте
05.02.19
✎
14:37
|
А полнотекстовый поиск?
|
|||
17
tabarigen
05.02.19
✎
15:31
|
(16) он медленный и я не могу его готовить.
Когда данных много скорость работы динамического списка не устраивает |
|||
18
PR
05.02.19
✎
15:35
|
(9) LOL
|
|||
19
tabarigen
05.02.19
✎
15:37
|
(18) ПАРАЦЕТАMOL
|
|||
20
АНДР
05.02.19
✎
15:42
|
(15) Если применится к результату соединения. Сначала отбери номенклатуру во временную таблицу, потом её дополняй.
|
|||
21
catena
06.02.19
✎
05:17
|
"ГДЕ ИСТИНА "
..... СтрокаПоиска = СтрокаПоиска + " И Номен.Наименование ПОДОБНО " + """%" + стр+ "%"""; Минус счетчик, минус Если. |
|||
22
vasvl123
06.02.19
✎
05:45
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |