Обработка + как специальный символ в поиске Lucene

В 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.

7
задан Ed. 24 October 2009 в 03:24
поделиться

3 ответа

Поскольку + является специальным символом, его необходимо экранировать. Список всех символов, которые необходимо экранировать, находится здесь (См. Внизу страницы.)

Вам также нужно быть осторожным с анализатором, который вы используете при индексировании. Например, StandardAnalyzer пропустит + . Возможно, вам понадобится использовать что-то вроде WhiteSpaceAnalyzer при индексировании и поиске, что сохранит специальные символы в потоке токенов. Помните, что вам нужно использовать один и тот же анализатор при индексировании и поиске.

3
ответ дан 7 December 2019 в 14:34
поделиться

Помимо выбора подходящего анализатора, вы можете использовать QueryParser.Escape (string s) , чтобы гарантировать, что все специальные символы правильно экранированы.

Поскольку это статическая функция , вы можете использовать ее, даже если вы используете MultiFieldQueryParser.

Например, вы можете попробовать что-то вроде этого:

queryField = multiFieldQueryParser.Parse(QueryParser.Escape(inpKeywords));
1
ответ дан 7 December 2019 в 14:34
поделиться

Попробуйте кодировку UTF-8 для ваших поисковых запросов.

Вы можете включить это, как описано в этой статье

0
ответ дан 7 December 2019 в 14:34
поделиться