2016-12-23 17 views
0

У меня есть прецедент, где мне нужно выполнить сложное сопоставление строк, в записи которого около 5,1 миллиона. Когда я говорю сложное сопоставление строк, я имею в виду использование библиотеки для выполнения нечеткой строки. (http://blog.bripkens.de/fuzzy.js/demo/)Каков наилучший способ выполнить сложный поиск строк по 5M-записям? Уровень приложения или уровень БД?

База данных, которую мы используем на работе, - это SAP Hana, которая отлично подходит для извлечения и запросов, поскольку она находится в памяти, поэтому я бы хотел избежать вытаскивания данных и повторного заполнения ее в памяти на прикладном уровне, но в то же время я не могу воспользоваться преимуществами библиотек (есть API для нечеткого соответствия в БД, но для нас это недостаточно полно).

Что такое средняя площадка? Если я предварительно обрабатываю и свяжу слова в БД с определенными ключевыми словами, которые пользователь может искать, я могу сократить накладные расходы, но есть ли какие-либо передовые методы, которые применяются, когда дело доходит до этого?

Если это имеет значение. Список представляет собой список дескрипторов фактурирования (которые отображаются на операторах CC), поэтому пользователь будет искать эти дескрипторы, чтобы выяснить, к каким компаниям принадлежит дескриптор.

+1

Похоже, вы получаете правильную идею с предварительной обработкой. Я собирался предложить использовать возможности SAP для сужения результатов, прежде чем использовать в приложении более мощные библиотеки: среднюю почву. – SomeDude

ответ

1

Если предположить, что «платежный дескриптор» является один столбец, вероятно, типа (N) VARCHAR Я хотел бы начать с очень простой SAP HANA нечеткого поиска, например:

SELECT top 100 SCORE() AS score, <more fields> 
FROM <billing_documents> 
WHERE CONTAINS(<bill_descr_col>, <user_input>, FUZZY(0.7)) 
ORDER BY score DESC; 

Может быть, это достаточно, когда уже хорошо вы хотите применить свою библиотеку js к набору результатов. Если нет, я бы начал экспериментировать с аналогичным параметромCalculationMode, например «Similarcalculationmode = substringsearch» и т. Д. И я всегда буду смотреть на время ответа, они могут быть выше при использовании некоторых параметров. Только если время ответа велико, или многие активные одновременные пользователи используют ваш запрос, я бы попытался создать индекс поиска нечеткого поиска в столбце поиска. Если вам нужно больше вариантов поиска, вы также можете создать индекс fullext.

Но это все действительно зависит от того, используется случай, значения, которые вы хотите сравнить и т.д. Существует очень полный набор функций и опций для различных вариантов использования, проверьте help.sap.com/hana/SAP_HANA_Search_Developer_Guide_en.pdf ,

В проекте мы выполнили поиск по свободному стилю по нескольким столбцам адреса (имя, фамилия, название компании, почтовый индекс, улица), и мы получили время отклика 100-200 мс на ок. 6 записей Mio БЕЗ использования каких-либо специальных индексов.