java - KeywordAnalyzer y LowerCaseFilter/LowerCaseTokenizer
lucene customization (2)
Quiero construir mi propio analizador que use filtros / tokenizadores.
Quiero decir, el mismo campo es Palabra clave (toda la secuencia como un solo token) y minúscula
Si KeywordAnalyzer solo se usa, el valor de campo no distingue entre mayúsculas y minúsculas. Si uso LowerCaseTokenizer o LowerCaseFilter , tengo que combinarlos con otros analizadores que hagan lo mismo KeywordAnalyzer (separados por ninguna letra, por espacios, eliminar palabras de parada, etc.)
La pregunta es : ¿hay alguna forma de convertir ese campo en Palabra clave (toda la secuencia como un solo token) y esa letra minúscula usando filtros o analizadores Lucene o tokenizadores?
(traducción de Google, perdón por los errores)
En Lucene 3.6.2 debe verse así:
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));
}
}
Esto debería funcionar:
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));
}
}