2017-12-29 9 views
0

Ich möchte nicht meine eigene Analyzer-Klasse schreiben. Ich habe eine neue Funktion von Apache Lucene CustomAnalyzer gesehen, wo Sie Ihren eigenen Custom Analyzer erstellen können.So verwenden Sie SynonymMap in CustomAnalayzer von Lucene 6.2.0

Analyzer ana = CustomAnalyzer.builder(Paths.get(index)) 
.withTokenizer(StandardTokenizerFactory.class).addTokenFilter(LowerCaseFilterFactory.class) 
.addTokenFilter(StandardFilterFactory.class).build(); 

so hier will ich für addTokenFilter (SynonymFilter.class) eine weitere Option hinzuzufügen, wo ich den Standardwert an den Analysator wie synonymMap, tokenstream und alles passieren, damit ich möchte nur fragen ..

addTokenFilter(StopFilterFactory.class, "ignoreCase", "false", "words", "stopwords.txt", "format", "wordset") 

ich dieses Beispiel gesehen haben, ist möglich, wie hier in der gleichen Art und Weise zu verwenden StopFilter definiert ist ist es möglich SynonymMap innerhalb eigenen Analysator zu verwenden oder nicht ..und wenn ja dann, wie dies zu tun .. Konstruktor für Synonym Filter ist als solcher ..

HashMap<String, String> synonymMap = new HashMap<String, String>(10); 
    synonymMap.put("synonyms", "Facebook"); 

ich tue es wie dieses

SynonymMap.Builder builder = new SynonymMap.Builder(true); 
    builder.add(new CharsRef("Facebook"), new CharsRef("YearBook,FaceB00k"), true); 
    builder.add(new CharsRef("Facebook1"), new CharsRef("Fraud"), false); 
    builder.add(new CharsRef("Suzie"), new CharsRef("Susan"), false); 
    SynonymMap map = null; 
    try { 
     map = builder.build(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    Analyzer ana = CustomAnalyzer.builder(Paths.get(index)) 
      .withTokenizer(StandardTokenizerFactory.class) 
      .addTokenFilter(StandardFilterFactory.class) 
      .addTokenFilter(LowerCaseFilterFactory.class) 
      .addTokenFilter(SynonymFilterFactory.class,synonymMap) 
      .build(); 

seine gibt mir Fehler wie diese

Exception in thread "main" java.io.IOException: Resource not found: Facebook 
at org.apache.lucene.analysis.util.ClasspathResourceLoader.openResource(ClasspathResourceLoader.java:67) 

Vielen Dank im Voraus ..

Antwort

0

Der Weg in zu builder vergangen ist nicht der Index Verzeichnis, aber wo es nach Konfigurationsressourcen für diesen Analysator suchen sollte. Das zweite Argument von addTokenFilter ist eine Liste von Parametern, keine Synonymabbildung.

Was Sie tun möchten, ist Ihre Liste von Synonymen in eine Datei in dem oben genannten Verzeichnis, und übergeben Sie diesen Dateinamen als "Synonym" -Parameter in Ihrem addTokenFilter Aufruf (sowie alle anderen Parameter Sie vielleicht brauchen).

Verwandte Themen