Дисковое пространство не является проблемой..., но памятью, и производительность будет. Удвойте чтения страницы, двойной индексный размер, странный КАК и = постоянное поведение и т.д.
, необходимо ли сохранить китайский язык и т.д. сценарий? Да или нет...
И от MS BOL" устройство хранения данных и Эффекты Производительности Unicode"
Редактирование :
Недавний ТАК выделение вопроса, как плохо nvarchar производительность может быть...
SQL Server использует высокий ЦП при поиске внутри nvarchar строк
Сколько у вас ключевых слов (например, "или", "в", "с завышенной ценой", "с")? Если у вас есть только пара из них, я бы также предложил использовать простую обработку строк (регулярные выражения).
Но если у вас есть больше, вы можете изучить возможность реализации реального парсера для этих поисковых выражений. Irony.net может помочь вам в этом (я нашел его чрезвычайно простым в использовании, поскольку вы можете выразить свою грамматику в форме, близкой к bnf, прямо в коде).
Проект Lucene / NLucene имеет функциональные возможности для логических запросов и некоторых других форматов запросов. Я не знаю о возможностях добавления собственных расширений, таких как автор, в вашем случае, но, возможно, стоит проверить это.
Есть несколько способов сделать это, два из них:
Согласно вашему примеру, язык очень простой, поэтому разделение строки по ключевому слову может быть лучшим решением.
string sentence = "house in new york priced over $500000 with a swimming pool";
string[] values = sentence.Split(new []{" in ", " priced over ", " with a "},
StringSplitOptions.None);
string type = values[0];
string area = values[1];
string price = values[2];
string accessories = values[3];
Однако , могут возникнуть следующие вопросы: как проверить, соответствует ли предложение ожидаемой форме? Что произойдет, если некоторые ключевые слова могут появиться как часть значений?
Если это так, вы столкнетесь с некоторыми библиотеками, которые вы можете использовать для синтаксического анализа ввода с использованием определенной грамматики. Две из этих библиотек, которые работают с .Net, - это ANTLR и Gold Parser , обе бесплатны. Основная проблема - определение грамматики.
Я думаю, вам нужно просто обработать строки. Нет разумного способа сделать это.
Поэтому замените «ИЛИ» своим собственным оператором или (например, ||). Насколько мне известно, для этого нет библиотеки.
Я предлагаю вам использовать регулярные выражения.
Грамматика будет очень хорошо работать для второго примера, который вы привели, но с первым (ключевые слова / командные строки любого порядка) лучше всего обрабатывать с помощью Split () и класса для обработки различных ключевых слов и команды. Вам нужно будет выполнить начальную обработку для обработки цитируемых областей перед разделением (например, замена пробелов в цитируемых областях редким / неиспользуемым символом).
Команды ":" легко найти и вытащить из строки поиска для обработка после завершения разделения. Просто просмотрите массив в поисках.
Ключевые слова +/- также легко найти и добавить в sql-запрос в виде предложений AND / AND NOT.
Единственное место, где вы можете столкнуться с проблемами, - это использование «или», поскольку вам нужно будет определить, как с этим обращаться. Что делать, если есть несколько "или" с? Но порядок ключевых слов в массиве такой же, как и в запросе, так что это не будет проблемой.