ฉันไม่ต้องการเขียนคลาส Analyzer ของตัวเอง ฉันได้เห็นคุณสมบัติใหม่ที่ได้รับจาก apache lucene CustomAnalyzer ซึ่งคุณสามารถสร้าง Custom Analyzer ของคุณเองได้
Analyzer ana = CustomAnalyzer.builder(Paths.get(index))
.withTokenizer(StandardTokenizerFactory.class).addTokenFilter(LowerCaseFilterFactory.class)
.addTokenFilter(StandardFilterFactory.class).build();
ดังนั้นที่นี่ฉันต้องการเพิ่มอีกหนึ่งตัวเลือกสำหรับ addTokenFilter(SynonymFilter.class) โดยที่ฉันจะส่งค่าเริ่มต้นไปยังตัววิเคราะห์เช่น synonymMap, tokenstream และทุกอย่าง ดังนั้นฉันแค่อยากจะถาม ..
addTokenFilter(StopFilterFactory.class, "ignoreCase", "false", "words", "stopwords.txt", "format", "wordset")
ฉันได้เห็นตัวอย่างนี้เป็นไปได้ที่จะใช้ในลักษณะเดียวกับที่นี่ StopFilter ถูกกำหนดไว้ เป็นไปได้หรือไม่ที่จะใช้ SynonymMap ภายในตัววิเคราะห์ที่กำหนดเองหรือไม่ .. และถ้าใช่จะต้องทำอย่างไร .. ตัวสร้างสำหรับตัวกรองคำพ้องความหมายเป็นเช่นนั้น ..
HashMap<String, String> synonymMap = new HashMap<String, String>(10);
synonymMap.put("synonyms", "Facebook");
ฉันกำลังทำเช่นนี้
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();
มันทำให้ฉันมีข้อผิดพลาดเช่นนี้
Exception in thread "main" java.io.IOException: Resource not found: Facebook
at org.apache.lucene.analysis.util.ClasspathResourceLoader.openResource(ClasspathResourceLoader.java:67)
ขอบคุณล่วงหน้า..