Стандартный анализатор, BackSlash и Lucene.net - PullRequest
0 голосов
/ 01 апреля 2011

Я использую Lucene.Net 2.9.2. Я использую StandardAnalyzer с настраиваемым списком стоп-слов, который включает в себя только английские стоп-слова. Мои данные включают путь к папке, такой как «questions \ text \ testing data». Это нормально при индексации и поиске пути к этой папке. Однако я использую QueryPaser и создаю запрос, используя Standard Analyzer с тем же индексированием. Парсер запросов удаляет обратную косую черту и меняет нижний регистр. Поэтому я использовал escape-символ '\', он не работает. Ниже приведен мой тестовый код.

QueryParser queryParser = new QueryParser ("", new StandardAnalyzer (STOP_WORDS)); Query query = queryParser.Parse ("+ Поле1: вопросы \ текст \ данные тестирования + (Поле2: хорошо)");

Изменение синтаксиса запроса "+ Field1:" questionstexttesting "data + (Field2: good".

путь к папке = вопросы \ текст \ данные тестирования поиск текста = хорошо

В моем приложении я не мог знать, какие поля будут искать. Во-первых, я ищу это слово и сохраняю поиск с синтаксисом запроса lucene. Позже я снова использую поиск и перехожу с QueryParser. Заранее благодарен за любой совет!

1 Ответ

1 голос
/ 03 апреля 2011

Индексируйте свои пути, используя KeywordAnalyzer, и свои данные, используя StandardAnalyzer. Вы можете сделать это, используя PerFieldAnalyzerWrapper.

Создайте свой поисковый запрос, используя BooleanQuery, добавьте PrefixQuery для своего пути и используйте QueryParser для предоставленной пользователем строки поиска.

var query = new BooleanQuery();
query.Add(new PrefixQuery("Path", "questions\\text\\testing\\"), BooleanClause.Occur.MUST);

var analyzer = new StandardAnalyzer(STOP_WORDS);
var queryParser = new QueryParser("Data", analyzer);
var parsedQuery = queryParser.Parse("data +Field2:good");
query.Add(parsedQuery, BooleanClause.Occur.MUST);

Измените интерфейс поиска, чтобы пользователю никогда не приходилось вручную вводить пути.

...