Ich möchte Benutzer die Möglichkeit geben, Groß-und Kleinschreibung oder Groß-und Kleinschreibung zu beachten.Lucene, wie zwischen Groß- und Kleinschreibung zu wechseln
Meine Idee ist, verwenden Sie eine Groß-und Kleinschreibung Analyzer, um die Daten zu indizieren und dann empfindliche oder unempfindliche Analysator verwenden, um abhängig von Benutzereingaben zu suchen.
Also habe ich meine Groß- und Kleinschreibung Analysator und hier eine einfache meiner Code ist:
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);
}
};
}
Für die Indizierung ich benutzten:
Analyzer analyzer = new CaseSensitiveStandardAnalyzer(Version.LUCENE_46);
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_46,analyzer);
IndexWriter indexWriter = new IndexWriter(indexDir,config);
indexWriter.addDocument(document);
Für die Suche habe ich:
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;
Wenn ich das müde, funktionierte der sensible Fall, aber der unempfindliche Fall nicht.
Nach mehr Forschung, fand ich, dass die Verwendung eines Groß-und Kleinschreibung-Analyse mit einer Abfrage niedriger Sorgfalt nicht funktioniert. Case-sensitive Analyzer indiziert arbeiten mit Groß-und Kleinschreibung und Groß-und Kleinschreibung-Analyse-indizierten Arbeit mit case-insensitive Abfrage, kann jemand bestätigen dies?
Es scheint mir der einzige zuverlässige Weg, um sowohl Groß-und Kleinschreibung und Groß-und Kleinschreibung zu finden ist zweimal Index, für jeden Fall, ist das richtig?