2013-11-12 4 views
1

У меня проблема с Lucent.NET 3.0.3.Поиск Lucene с использованием StopWords в StandardAnalyzer

Мой проект анализирует документы, используя StandardAnalyzer с StopWord-List (объединенные немецкие и английские слова).
При поиске я создаю свой поисковик вручную и разбираю его с помощью MultiFieldQueryParser. Парсер инициализируется с помощью того же анализатора, что и индексирующие документы.
Анализированный поисковый запрос инициализировал BooleanQuery. Поиск BooleanQuery и TopScoreDocCollector в индексе Lucene с IndexSearcher.

Мой код выглядит следующим образом:

using (StandardAnalyzer analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30, roxConnectionTools.getServiceInstance<ISearchIndexService>().GetStopWordList())) 
{ 
    ... 
    MultiFieldQueryParser parser = new MultiFieldQueryParser(Lucene.Net.Util.Version.LUCENE_30, searchFields, analyzer); 
    parser.MultiTermRewriteMethod = MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE; 
    parser.AllowLeadingWildcard = true; 
    ... 
    Query searchQuery = parser.Parse(searchStringBuilder.ToString().Trim); 
    ... 
    BooleanQuery boolQuery = new BooleanQuery(); 
    boolQuery.Add(searchQuery, Occur.MUST); 
    ... 
    TopScoreDocCollector scoreCollector = TopScoreDocCollector.Create(SearchServiceTools.MAX_SCORE_COLLECTOR_SIZE, true); 
    ... 
    searcher.Search(boolQuery, scoreCollector); 
    ScoreDoc[] scoreDocs = scoreCollector.TopDocs().ScoreDocs; 
} 

Если индекс I поле документа со значением «Тест- унд Produktivumgebung» Я не могу найти этот документ путем поиска этого термина.
Я получаю результаты, если исправить поисковый запрос до «Test-Produktivumgebung».
Слово «und» находится в моем списке StopWord.

Мой поисковый запрос выглядит следующим образом:
генерироваться вручную Поисковый запрос: (+ * Тест * + * унд * + * Produktivumgebung *)
поиск Parsed запрос: + (название: * Test *) + (название: * унд *) + (название: * Produktivumgebung *)

Почему я не могу найти документ на поиск "испытательно унд Produktivumgebung"?

ответ

4

Подстановочные запросы не анализируются (см. Пример this question). Поскольку вы (если я правильно понимаю), интерпретируя запрос "Test- und Produktivumgebung" на (+*Test* +*und* +*Produktivumgebung*), анализатор не используется ни для одного из этих подстановочных запросов, и слова остановки не будут устранены.

Если вы устраните шаг, выполняющий этот перевод, запрос "Test- und Produktivumgebung" должен быть проанализирован на запрос фразы и проанализирован и должен работать нормально. Еще одна причина для устранения этого шага заключается в том, что применение ключевого шаблона для каждого термина приведет к тому, что ваша производительность станет очень бедной. Вот почему ведущие шаблоны должны быть включены вручную, потому что, как правило, их плохо использовать.

Смежные вопросы