Я создаю приложение типа FAQ для самостоятельной помощи, и одно из требований заключается в том, что конечный пользователь должен иметь возможность искать разделы часто задаваемых вопросов.У меня есть три модели заметок, перечисленные ниже с соответствующими (то есть доступными для поиска) столбцами:
Topic: Name, Description
Question: Name, Answer
Problem: Name, Solution
Все три таблицы связаны с Темой через столбец TopicID
.Идея состоит в том, чтобы предоставить одно текстовое поле, в котором пользователь может ввести поисковый запрос, что-либо в виде предложения (например, «Как я выполняю X») или фразы (например, «Выполнение X» или «Выполнить X»), и предоставитьвсе темы / вопросы / проблемы, в которых есть любое из слов, введенных в полях имени или описания / ответа / решения;в модели будут доступны только те столбцы с возможностью поиска, и мне не нужно беспокоиться о фильтрации общих слов, таких как «как» и тому подобное (это было бы неплохо, но не является обязательным требованием, поскольку это не точное совпадение, а нечеткое совпадение).
По причинам, не зависящим от меня, я должен использовать хранимую процедуру.Мой вопрос заключается в том, что было бы наиболее подходящим способом для поиска, подобного этому;Я видел похожие вопросы относительно нескольких столбцов, но на самом деле не существует переменного числа столбцов, всегда есть два столбца в таблице, которые действительно доступны для поиска.Проблема в том, что поисковый запрос теоретически может быть почти любым - предложение, фраза, список терминов, разделенных запятыми (например, «x, y, z»), поэтому мне придется разделить поисковый термин на:компоненты (например, разделить на пустое пространство), а затем искать каждую пару столбцов для каждого термина?Это достаточно легко сделать в SQL Server?Альтернатива, немного более сложная, состоит в том, чтобы просто извлечь все данные обратно, а затем разделить запрос и отфильтровать результаты в коде на стороне сервера, поскольку не должно быть , что введено много элементов, но ячувствовал бы себя немного грязным, делая что-то подобное; -)