/ / KeywordAnalyzer e LowerCaseFilter / LowerCaseTokenizer - java, lucene, personalizzazione, analizzatore

KeywordAnalyzer e LowerCaseFilter / LowerCaseTokenizer - java, lucene, personalizzazione, analizzatore

Voglio costruire il mio analizzatore che utilizza entrambi i filtri / tokenizzatori.

Voglio dire, lo stesso campo è Parola chiave (intero stream come singolo token) e minuscolo

Se KeywordAnalyzer usare solo, il valore di campo mantiene il maiuscolo / minuscolo. Se io uso LowerCaseTokenizer o LowerCaseFilter Devo combinarli con altri analizzatori che fanno la stessa cosa KeywordAnalyzer (separati da nessuna lettera, da spazi, rimuovi parole-stop, ecc.)

La domanda è: Esiste un modo per rendere quel campo come Parola chiave (intero flusso come un singolo token) e quello minuscolo utilizzando filtri o analizzatori Lucene o tokenizer?

(google tradotto, scusa per gli errori)

risposte:

5 per risposta № 1

Questo dovrebbe funzionare:

public final class YourAnalyzer extends ReusableAnalyzerBase {

@Override
protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
final TokenStream source = new KeywordTokenizer(reader);
return new TokenStreamComponents(source, new LowercaseFilter(Version.LUCENE_36, source));
}
}

1 per risposta № 2

In Lucene 3.6.2 deve apparire così:

import org.apache.lucene.analysis.KeywordAnalyzer;
import org.apache.lucene.analysis.KeywordTokenizer;
import org.apache.lucene.analysis.LowerCaseFilter;
import org.apache.lucene.analysis.LowerCaseTokenizer;
import org.apache.lucene.analysis.ReusableAnalyzerBase;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.util.Version;

public class YourAnalyzer extends ReusableAnalyzerBase {

private final Version version;

public YourAnalyzer(final Version version) {
super();
this.version = version;
}

@Override
protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
final Tokenizer source = new KeywordTokenizer(reader);
return new TokenStreamComponents(source, new LowerCaseFilter(this.version, source));
}

}