Метод Highlighter.getBestFragments от Lucene возвращает пустую строку, когда запрос содержит косую черту

У меня есть приложение, в котором Highlighter.getBestFragments возвращаются правильно, когда вводится запрос типа "fulltext:rajath AND filepath:rajath". Однако, если тот же запрос содержит "/" в пути к файлу, это означает, что если запрос похож на "fulltext:rajath AND filepath:rajath/rajath1", метод Highlighter.getBestFragments возвращает пустую строку. Пожалуйста, дайте мне знать, как эта проблема может быть решена. Я сильно подозреваю, что проблема связана с косой чертой в запросе. Есть ли способ избежать этого?

В настоящее время я использую lucene 2.9.3 в своем приложении, где выделение происходит неправильно. Но запрос "fulltext: rajath AND filepath: rajath / rajath1" используется для правильного выделения ключевого слова rajath в lucene 2.2.0. Как в 2.2.0, так и в 2.9.3 при вводе "fulltext: rajath AND filepath: rajath / rajath1" внутренний запрос изменяется на [+fulltext:rajath +filepath:"rajath rajath1"]

1 ответ

В Lucene 4.x косая черта (/) теперь является специальным символом, который используется для обозначения поиска по регулярному выражению. Вам нужно будет избежать косых черт, как:

String query = "filepath:rajath\\/rajath1";

Или вы можете сделать так, чтобы lucene спасался для вас, например:

String searchfor = "rajath/rajath1";
String escapedsearch = QueryParserBase.escape(searchfor);
String query = "filepath:" + escapedsearch;
Другие вопросы по тегам