Экранирование специальных символов в lucene и запрос с использованием подстановочного знака - PullRequest
1 голос
/ 21 октября 2011

У меня проблема, когда я пытаюсь сделать запрос, используя подстановочный знак в термине, в котором есть специальный символ.Например, если я индексирую "Test::Here", я выполняю поиск с использованием подстановочного знака ? для "TE?T\:\:Here" (ПРИМЕЧАНИЕ: я избежал ':').Я не получаю никаких результатов.Я использую стандартный анализатор и анализатор запросов для индексации и поиска.

Кто-нибудь сталкивался с подобной проблемой?

Ответы [ 3 ]

2 голосов
/ 21 октября 2011

StandardAnalyzer использует StandardTokenizer, поэтому Test::Here рассматривается как два токена: Test и Here. Запросы с подстановочными знаками не выполняются через анализатор, поэтому вы в конечном итоге сопоставляете двоеточия с условиями, которые их не содержат. Вам нужно использовать другой токенизатор, например WhitespaceTokenizer.

1 голос
/ 21 октября 2011

Вы не можете искать то, что не проиндексировали. Ниже приведен код, чтобы увидеть, что вы индексируете.

var analyzer = new AnyAnalyzer();
TokenStream tokensTream = analyzer.TokenStream("", new StringReader("Test::Here"));
Lucene.Net.Analysis.Token token = tokensTream.Next();
while (token != null)
{
    Console.Write("[" + token.TermText() + "] ");
    token = tokensTream.Next();
}
0 голосов
/ 21 октября 2011

Артур прав, но следует учитывать еще одну проблему, заключающуюся в том, что подстановочные термины вообще не анализируются в Lucene, поэтому вам необходимо убедиться, что регистр вашего термина запроса совпадает с регистром индексируемого термина (послеанализ).

...