Лучший способ сравнить сложные строки в SQL или .NET - PullRequest
4 голосов
/ 25 августа 2010

Я чувствую себя немного новичком, публикуя это, но в любом случае:

У меня есть большое количество стоковых предметов, 3000-5000, которые имеют сложные имена, основываясь на том, кто вошел в предметы за период16 лет, и пример имени:

"Food, Dog, Pal Meaty Bites chunks 8kg bag"

Другой, связанный элемент называется:

"DOG FOOD: Meaty Bites (Pal) 22kg bag"

Проблема в том, что у меня есть списки товаров от ряда поставщиковс обновленными ценами, которые мне нужны, чтобы соответствовать нашему существующему списку акций.В первый раз, когда я получаю список, я хочу попробовать выполнить поиск «наиболее близкое соответствие» и представить пользователю список наших текущих наименований товарных позиций, которые могут соответствовать названию товарной позиции поставщиков.Затем пользователь выберет правильный номер SKU, а приложение импортирует элемент поставщика и ссылку на нашу таблицу запасов PK.

Имя поставщика также будет отличаться.Например:

"Pal Meaty Bites Chunks 8kg"

Я могу сделать совпадение в SQL или .NET, что вы когда-либо рекомендовали.Я хочу представить пользователю как можно меньше элементов на основе соответствия наибольшего количества ключевых слов.Мои идеи на данный момент таковы:

В .Net: разбить массив и выполнить поиск по каждому ключевому слову для каждого элемента (медленно). В SQL: использовать полнотекстовый индекс и разделить имя на ключевые слова, используя возвращаемый список «ИЛИ».по рангу с отсечкой

Это должно быть распространенным сценарием, я просто не уверен в лучшем способе сделать это.Спасибо за ваш вклад!

Редактировать: Добавлен некоторый контекст: у нас есть таблица SKU, которая имеет около 20 полей, включая StockKeepingUnitID, который является уникальным PK (int identity).Продукты поставщиков помещаются в таблицу с именем StockOrderUnit, которая имеет FK of SupplierID и StockKeepingUnitID и имеет поле с именем SupplierCode (varchar), которое содержит уникальный код поставщиков для этого элемента запаса.Проблема заключается в том, что многочисленные поставщики отправляют нам прайс-листы, и пользователь сам должен сопоставить позиции поставщика (которые на данный момент неизвестны) с уже имеющимися SKU в БД.Как только они выбирают одну, записи объединяются.

Ответы [ 3 ]

3 голосов
/ 25 августа 2010

Обязательно верните это в код клиента, а не в БД. Это позволит вам, как вы говорите, создать счет совпадений и позволить пользователю выбирать / подтверждать ваши автоматические совпадения.

Я бы занялся этим, разделив массив, преобразовав его в нижний регистр, а затем отсортировав по алфавиту. Возможно, попробуйте переместить термины с числами в начале массива. Вытяните все это обратно в строку, чтобы помочь пользователю распознавать совпадения с некоторой последовательностью.

Я бы не решился сделать это автоматически и без участия пользователя в сценарии SQL. Возможно, пользователям может быть дана оценка, и им нужно только судить тех, кто находится под некоторым порогом.

1 голос
/ 25 августа 2010

Вы можете воспользоваться обоими подходами.
Разделить и выполнить базовое сопоставление в SQL.
Затем оценить результаты в .Net

Базовое сопоставление в SQL может быть простым, какбольшой список всех вещей, которые соответствуют количеству слов.

Тогда ваш выигрыш в .Net - это место, где произойдет настоящее «волшебство».

1 голос
/ 25 августа 2010

Можно использовать ключевое слово SQL LIKE для выполнения таких поисков.

select fld1, fld2 from ProductTable where fld1 LIKE '%Meaty Bites%';

Извините, если у вас уже есть такой, но если у вас его нетсоздайте систему SKU (Stock Keeping Unit) для любви человечества.Как минимум, создайте уникальный первичный ключ с автоматическим увеличением (идентификатор) и примените его ко всем вашим записям.Затем используйте это для поиска и т. Д.

Используя «лайк», гораздо меньше записей попадет по проводам, и вам не придется писать кучу кода для выполнения работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...