В SQL Server 2005 вы можете использовать синтаксис CROSS APPLY :
select id_num, name, balance, SUM(x.discount)
from listOfPeople
cross apply dbo.calculatePersonalDiscount(listOfPeople.id_num) x
Аналогично, есть синтаксис OUTER APPLY для эквивалента соединения LEFT OUTER.
Поскольку +
является специальным символом, его необходимо экранировать. Список всех символов, которые необходимо экранировать, находится здесь (См. Внизу страницы.)
Вам также нужно быть осторожным с анализатором, который вы используете при индексировании. Например, StandardAnalyzer пропустит +
. Возможно, вам понадобится использовать что-то вроде WhiteSpaceAnalyzer при индексировании и поиске, что сохранит специальные символы в потоке токенов. Помните, что вам нужно использовать один и тот же анализатор при индексировании и поиске.
Помимо выбора подходящего анализатора, вы можете использовать QueryParser.Escape (string s)
, чтобы гарантировать, что все специальные символы правильно экранированы.
Поскольку это статическая функция , вы можете использовать ее, даже если вы используете MultiFieldQueryParser.
Например, вы можете попробовать что-то вроде этого:
queryField = multiFieldQueryParser.Parse(QueryParser.Escape(inpKeywords));
Попробуйте кодировку UTF-8 для ваших поисковых запросов.
Вы можете включить это, как описано в этой статье