Интеллектуальный поиск по наименованию

1. Sobol007 20 11.07.21 03:46 Сейчас в теме
Доброе утро!

Есть очень старая проблема, с которой все точно сталкивались - это поиск номенклатуры, но по наименованию контрагента.
Например, наименование контрагента "Дренажный насос WR 830 PV", а в вашей номенклатуре есть позиция "Насос дренаж. WR 830 PV"
Вопрос как сделать интеллектуальный поиск, который наибольшей вероятностью укажет на нужную позицию в вашем справочнике?

Пока пришла только идея:
1) разбить наименование поставщика на составляющие: "Дренажный", "насос", "WR", "830", "PV"
2) поискать каждую часть отдельно
3) в результате предложить номенклатуру с наибольшим совпадениям по частям

Просьба №2: Помогите оптимизировать запрос, пожалуйста

ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ табЧасть1
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	Номенклатура.Наименование ПОДОБНО "%" + &Наименование + "%"
	И НЕ Номенклатура.ЭтоГруппа
	И НЕ Номенклатура.ПометкаУдаления

ИНДЕКСИРОВАТЬ ПО
	Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ табЧасть2
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	Номенклатура.Наименование ПОДОБНО "%" + &Наименование1 + "%"
	И НЕ Номенклатура.ЭтоГруппа
	И НЕ Номенклатура.ПометкаУдаления

ИНДЕКСИРОВАТЬ ПО
	Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ табЧасть3
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	Номенклатура.Наименование ПОДОБНО "%" + &Наименование2 + "%"
	И НЕ Номенклатура.ПометкаУдаления
	И НЕ Номенклатура.ЭтоГруппа

ИНДЕКСИРОВАТЬ ПО
	Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Номенклатура.Ссылка КАК Ссылка
ПОМЕСТИТЬ табЧасть4
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	Номенклатура.Наименование ПОДОБНО "%" + &Наименование3 + "%"
	И НЕ Номенклатура.ПометкаУдаления
	И НЕ Номенклатура.ЭтоГруппа

ИНДЕКСИРОВАТЬ ПО
	Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Подзапрос.Ссылка КАК Номенклатура,
	Подзапрос.Вес КАК Вес
ИЗ
	(ВЫБРАТЬ
		Номенклатура.Ссылка КАК Ссылка,
		КОЛИЧЕСТВО(РАЗЛИЧНЫЕ табЧасть1.Ссылка) + КОЛИЧЕСТВО(РАЗЛИЧНЫЕ табЧасть2.Ссылка) + КОЛИЧЕСТВО(РАЗЛИЧНЫЕ табЧасть3.Ссылка) + КОЛИЧЕСТВО(РАЗЛИЧНЫЕ табЧасть4.Ссылка) КАК Вес
	ИЗ
		Справочник.Номенклатура КАК Номенклатура
			ЛЕВОЕ СОЕДИНЕНИЕ табЧасть1 КАК табЧасть1
			ПО Номенклатура.Ссылка = табЧасть1.Ссылка
			ЛЕВОЕ СОЕДИНЕНИЕ табЧасть2 КАК табЧасть2
			ПО Номенклатура.Ссылка = табЧасть2.Ссылка
			ЛЕВОЕ СОЕДИНЕНИЕ табЧасть3 КАК табЧасть3
			ПО Номенклатура.Ссылка = табЧасть3.Ссылка
			ЛЕВОЕ СОЕДИНЕНИЕ табЧасть4 КАК табЧасть4
			ПО Номенклатура.Ссылка = табЧасть4.Ссылка
	ГДЕ
		(НЕ табЧасть1.Ссылка ЕСТЬ NULL
				ИЛИ НЕ табЧасть2.Ссылка ЕСТЬ NULL
				ИЛИ НЕ табЧасть3.Ссылка ЕСТЬ NULL
				ИЛИ НЕ табЧасть4.Ссылка ЕСТЬ NULL)
	
	СГРУППИРОВАТЬ ПО
		Номенклатура.Ссылка
	
	ИМЕЮЩИЕ
		КОЛИЧЕСТВО(РАЗЛИЧНЫЕ табЧасть1.Ссылка) + КОЛИЧЕСТВО(РАЗЛИЧНЫЕ табЧасть2.Ссылка) + КОЛИЧЕСТВО(РАЗЛИЧНЫЕ табЧасть3.Ссылка) + КОЛИЧЕСТВО(РАЗЛИЧНЫЕ табЧасть4.Ссылка) > 1) КАК Подзапрос
ГДЕ
	НЕ Подзапрос.Ссылка.ЭтоГруппа
	И НЕ Подзапрос.Ссылка.ПометкаУдаления

УПОРЯДОЧИТЬ ПО
	Вес УБЫВ
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. МихаилМ 11.07.21 12:48 Сейчас в теме
умение пользоваться поисковыми сервисами интернет - базовый навык сотрудника индустрии ит.
3. antz 11.07.21 12:50 Сейчас в теме
А если в наименовании будет не четыре слова, а восемнадцать?
А вообще - ПолнотекстовыйПоиск в помощь.
vv2; mrChOP93; +2 Ответить
4. VladimirB 16 12.07.21 09:10 Сейчас в теме
(1) Нечеткое сравнение строк
strMatch.dll
5. user856012 13 12.07.21 09:25 Сейчас в теме
Интеллектуальный поиск по наименованию
Интеллект программы не может превышать интеллект программиста.
6. starik-2005 3038 12.07.21 15:33 Сейчас в теме
Полнотекстовый поиск работает в бухне - примером может являться контрагент.

Для реализации Вашего метода можно использовать временную таблицу с наименованиями контрагентов, например, и функцию повторного использования, которая получает эту таблицу. Искать по таблице можно хть в 1С (если не очень много контрагентов), хоть в SQL.

Я делал так: пробел, точка, дефис - новое слово. все буквы делал маленькие. В контрагенте сделал табличную часть, там сохранял маленькими буквами наименование, включая транслитерацию, удалял пробелы, точки, дефисы и прочие спецсимволы. Ну а дальше на подобно все отрезки, в дальше сортировал по позиции соответствия каждого слова (чем меньше позиция - тем выше в рейтинге вывод). Меньше трех букв не искал. Экономический эффект - на 90% сократился подбор "неправильных" контрагентов (300к штук было).
7. CheBurator 3119 14.07.21 10:44 Сейчас в теме
Поищи на форуме. Публикаций для этого достаточно.
Нечеткий поиск рулит, см.(4) есть реализации и без ВК.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот