2015-11-16 5 views
1

В настоящее время я создаю базу данных, которая будет отслеживать записи компаний. Мне нужно найти МНОГИЕ (мы говорим, возможно, несколько тысяч, когда это будет завершено) имена компаний против одного столбца в таблице, в которой будут указаны названия компаний. Я в настоящее время используют следующие основные MySQL LIKE запроса (это конденсируется, ток один имеет 300+ условия разыскивается):100-1000 + Term Искать Lucene/Sphinx/Mysql

SELECT * FROM "case-file-owner" WHERE "party-name" LIKE 'Nike%' OR 
"party-name" LIKE 'Lyon Group Inc.%' OR "party-name" LIKE 'Target Home%' 
ORDER BY "party-name" ASC 

Как вы можете видеть, это немного основной! Как бы вы сделали такой поиск с Lucene или Sphinx? Являются ли эти средства излишними для этой задачи? Хотя мне нужно искать потенциально тысячи компаний, текущая настройка только ищет таблицу, содержащую, пожалуй, 1000 записей каждый день (я запускаю запрос, который отсекает записи, которые мне не нужно искать).

Моя основная проблема связана с незначительными проблемами. Например: Company1, Inc. Company1 Inc. Company1 Inc. Company1 Incorporated. все возможные представления многих названий компаний, которые мне нужно найти.

Работает ли MATCH? Был бы такой гигантский вопрос, как это происходит навсегда с Lucene или Sphinx? Мой текущий LIKE-поиск «оптимизирован», сбрасывая любые ведущие подстановочные операторы ... но вряд ли умный!

ответ

1

Моя основная проблема связана с незначительными проблемами. Например: Company1, Inc. Company1 Inc. Company1 Inc. Company1 Incorporated. все возможные представления многих названий компаний, которые мне нужно найти.

В целом у вас возникнут проблемы с попыткой сопоставить переменные с именами компаний. Существует очень реальная вероятность того, что вы создадите ложные срабатывания. Например, «Nike%» может означать поиск вариантов, связанных с Nike Shoes, но также будет соответствовать Nikeno Inc (если бы была такая компания).

Если возможно, я бы предложил добавить колонку с нормализованной стороной, где вы храните один поисковый запрос, который представляет каждую компанию, например.

normalized-party-name party-name 
COMPANY INC   Company1, Inc. 
COMPANY INC   Company1 Inc. 
COMPANY INC   The Company1 Inc. 

Самая большая проблема, однако, вариации ловкостью, как запятые, точки и т.д. Я могу создать несколько вариантов название компании довольно легко

Вы можете удалить все знаки препинания из нормализованного названия. Вы также можете попробовать использовать Sphinx с Soundexmorphology. Soundex игнорирует пунктуацию при поиске соответствия. Затем вы можете использовать extendedmatching mode для поиска только уникальных вариантов, которые вы игнорируете пунктуации. Люцерн может иметь что-то подобное, но я не работал с ним.

+0

Я не могу этого сделать. Я не контролирую ввод данных, это общедоступные записи :( – photocode

+0

Можете ли вы создать таблицу на своем конце, которая отображает нормализованное имя в общедоступную запись и присоединяется к вашей собственной таблице при выполнении этого типа фильтрации? –

+0

Я полагаю, Я мог бы добавить свою собственную таблицу - я перестроил их базу данных локально. Самая большая проблема, однако, - это такие умные вариации, как запятые, периоды и т. Д. Я могу создать несколько вариаций названия компании довольно легко для сохраненных запросов. Предположим, удалять эти символы будет началом.Как я могу сделать это для нескольких строк? Я предполагаю, что фактическая команда редактирования, за которой следует поиск, будет работать быстрее, чем пытаться манипулировать строкой, а затем искать снова и снова. Что касается Луцен, не будет легче? Я чувствую, что это должен быть лучший вариант. – photocode