Допустим, у меня есть иерархия FirstName> MiddleName> LastName (~ 10k строк, для вопроса). Это означает, что у вас может быть строка «John> Mary-Anne> Eddy» или «Eddy> John> Jacob». Дело в том, что иерархия имеет мало смысла и очень чужда пользователю (в отличие, скажем, от страны> Состояние> Городская структура).Эффективный поиск трехуровневой иерархии
Поскольку он настолько неструктурирован и сбит с толку, я хочу предоставить пользователю окно с полным полным вводом. По мере их ввода он должен искать возможные совпадения подстрок, и когда они «корнируют» свою строку поиска на уровне, они затем ограничивают результаты ниже этого уровня.
Теперь, потому что есть много людей, названных «Джон», имеет мало смысла, что, если они типа «Джон», они только получить обратно результаты как
- John> Allen> Александр
- John> Allen> Burschawitz
- Джон> Аллен ... повторить 100 раз ...
Потому что они никогда не увидят уникальную строку "Джейсон> John> Смит".
Вместо этого, они должны получить обратно что-то вроде («*» это произвольный показатель для пользователя «Эй, много больше строк ниже этого есть»):
- John> Allen> *
- Джейсон> John> Смит
- Mike> John> *
- Mary> Елена> Johnason
Если они типа "Джон> Аль", то результаты были бы ограниченное чем-либо под «John>», но должно быть сгруппировано аналогично выше.
Надеюсь, что объяснения понятны. Требования немного ослаблены. Просто разумные, чтобы человек мог искать дерево и находить то, что им нужно.
В настоящее время у меня есть интересный SQL, который ищет поисковый запрос в строке, вычисляет его позицию, выполняет некоторую подстроку, группирует байты и порядок, чтобы получить приведенные выше результаты, но не работает хорошо достаточно.
Я пытаюсь решить эту проблему в типичном стеке LAMP (кроме Oracle). Это не общий хостинг, поэтому у меня есть полный контроль над сервером. Данные изменяются небольшими суммами каждые несколько недель, и результаты поиска могут оставаться устаревшими в течение разумного промежутка времени (например, cron, который обновляет индекс поиска, не может быть и речи).
Должен сказать, я не могу понять, что вы пытаетесь сделать, точно. Я не знаю, можете ли вы быть более ясными. – 108
ну ... может быть, лучшая аналогия: если бы у вас был список URL-адресов, и вы искали «com», вам не хотелось бы domain.com/a, domain.com/b, domain.com/b; вам просто нужно «domain.com/». результатом после этого может быть «other.org/COMputers» –
... и причина, по которой вы не хотите domain.com/a,/b,/c, состоит в том, что их так много, что других результатов пока что они не появятся в первых 10 результатах. –