Я использую PerFieldAnalyzer установить ExactTitle использовать новый LowercaseKeywordAnalyzer:Создано LowercaseKeywordAnalyzer в сочетании с TermQuery не возвращаются результаты
private Analyzer GetDefaultAnalyzer()
{
var perFieldAnalyzer = new PerFieldAnalyzerWrapper(new StandardAnalyzer(Version.LUCENE_30));
perFieldAnalyzer.AddAnalyzer(ReportFields.ExactTitle, new LowercaseKeywordAnalyzer());
...
Я строю индекс, добавляя в поле:
var exactTitleField = new Field(ReportFields.ExactTitle, report.PortalReportTitle, Field.Store.NO,
Field.Index.NOT_ANALYZED);
exactTitleField.Boost = 10.0f;
reportDoc.Add(exactTitleField);
Когда я просматриваю его, используя пример из 2 слов «test abc», он не находит его, когда я выполняю поиск по нему TermQuery:
var term = new Term(exactField, "test abc");
var exactQuery = new TermQuery(term);
query.Add(exactQuery,Occur.SHOULD);
var hits = searcher.Search(query, null, HitsLimit, Sort.RELEVANCE);
Если я выполняю поиск «Test Abc», он работает. Что я могу сделать, чтобы сделать этот регистр нечувствительным к ключевым словам/поисковым работам?
Вот анализатор:
public class LowercaseKeywordAnalyzer : Analyzer
{
public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader)
{
TokenStream tokenStream = new KeywordTokenizer(reader);
tokenStream = new LowerCaseFilter(tokenStream);
return tokenStream;
}
}
Спасибо заранее.
Это имеет смысл. Если я переключу его на ANALYZED, то не будет найдено «test abc» или «Test Abc». Вы видите что-то еще, что я пропустил? – DougJones
Большое спасибо за размещение кода. Оказалось, что я не устанавливал анализатор правильно при индексировании (несколько методов, изменение 1 и попадание в другое). Сказав это, вы помогли мне преодолеть следующую проблему, отметив, что мне нужно ввести строчный запрос. Еще раз спасибо! – DougJones