Я хочу дать пользователю возможность делать случайный или нечувствительный к регистру поиск.Lucene, как переключаться между чувствительным к регистру и регистрозависимым
Моя идея - использовать анализатор, чувствительный к регистру, для индексации данных, а затем использовать чувствительный или нечувствительный анализатор для поиска в зависимости от пользовательского ввода.
Так что я создал мой случай чувствительный анализатор и здесь просто мой код:
public final class CaseSensitiveStandardAnalyzer extends StopwordAnalyzerBase {
@Override
protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
final StandardTokenizer src = new StandardTokenizer(matchVersion, reader);
src.setMaxTokenLength(maxTokenLength);
TokenStream tok = new StandardFilter(matchVersion, src);
tok = new StopFilter(matchVersion, tok, stopwords);
return new TokenStreamComponents(src, tok) {
@Override
protected void setReader(final Reader reader) throws IOException {
src.setMaxTokenLength(CaseSensitiveStandardAnalyzer.this.maxTokenLength);
super.setReader(reader);
}
};
}
Для индексирования я использовал это:
Analyzer analyzer = new CaseSensitiveStandardAnalyzer(Version.LUCENE_46);
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_46,analyzer);
IndexWriter indexWriter = new IndexWriter(indexDir,config);
indexWriter.addDocument(document);
Для поиска я использовал:
Analyzer analyzer;
if(caseSentive)
analyzer = new CaseSensitiveStandardAnalyzer(Version.LUCENE_46);
else
analyzer = new StandardAnalyzer(Version.LUCENE_46);
QueryParser queryParser = new QueryParser(Version.LUCENE_46,"content", analyzer);
Query query = queryParser.parse(searchString);
//Search
TopDocs results = indexSearcher.search(query,10000);
ScoreDoc[] hits = results.scoreDocs;
Когда я устал от этого, чувствительный корпус работал, но нечувствительный случай этого не делал.
После более подробного исследования я обнаружил, что использование чувствительного к регистру анализатора с запросом на более низкий уровень обслуживания не будет работать. Интуитивно-зависимая анализатор, чувствительный к регистру, с зависящим от регистра запроса и нечувствительным к регистру анализатором индексированной работой с регистро-независимым запросом, может ли кто-нибудь подтвердить это?
Мне кажется, что единственный надежный способ поиска как чувствительного к регистру, так и нечувствительного к регистру - это индексировать дважды, по одному для каждого случая, это правильно?