2010-05-17 18 views
5

Với QueryParser, bộ lọc gốc dường như không hoạt động và với AnalyzingQueryParser, bộ lọc dừng không hiệu quả.Lucene QueryParser cần thiết hoạt động với Trình phân tích tùy chỉnh có bộ lọc dừng và porterstemfilter

Quan sát của tôi có đúng không? Làm thế nào để giải quyết vấn đề này?

Cập nhật OK Vì vậy, đã làm một số thử nghiệm với mã. AnalyzingQueryParser không cho phép stopfilter và QueryParser không cho phép porterstemmerfilter với fuzzysearches.

Vì vậy, tôi cần QueryParser cho phép tìm kiếm mờ cùng với hỗ trợ cho porterstemfilter và stopfilter.

+0

Nếu có ý kiến ​​khác, hãy nói như vậy. –

+0

Tôi không làm việc với lucene một thời gian, nhưng tôi nhớ rằng bạn cần phải sử dụng cùng một bộ phân tích cho cả việc lập chỉ mục và tìm kiếm. Đây có phải là vấn đề không? – Dzhu

+0

thông tin thêm. làm thế nào bạn đi đến kết luận rằng mọi thứ không hoạt động/hiệu quả? –

Trả lời

0

Bạn có thể ghi đè mở rộng QueryParser bằng cách phân lớp nếu cần. Tôi đã có thể sử dụng StopAnalyzer với AnalyzingQueryParser không có vấn đề:

Analyzer analyzer1 = new StopAnalyzer(Version.LUCENE_30, ImmutableSet.of("foo", "bar", "blop")); 
QueryParser qp = new AnalyzingQueryParser(Version.LUCENE_30, "field", analyzer1); 
Query q = qp.parse("foobar foo bar blop hello"); 
System.out.println("query " + q); 

q = qp.parse("foobar~ foo~ bar~ hell~"); 
System.out.println("query " + q); 

Tạo truy vấn: lĩnh vực: lĩnh vực foobar: hello và lĩnh vực: foobar ~ 0,5 địa ngục ~ 0,5. Điều này là sáng suốt 3.0.3, vì vậy tôi không chắc chắn nếu điều này áp dụng cho câu hỏi của bạn trở lại sau đó. Dù sao, tôi tình cờ gặp điều này và hy vọng nó có thể giúp đỡ. Bạn có thể gặp sự cố với trình chặn gốc nếu họ thêm các truy vấn ký tự đại diện, trong trường hợp này bạn có thể muốn ghi đè các phương thức:

@Override 
protected Query getFuzzyQuery(String field, String termStr, float minSimilarity) throws ParseException { 
    return super.getFuzzyQuery(field, termStr, minSimilarity); 
} 

@Override 
protected Query getWildcardQuery(String field, String termStr) throws ParseException { 
    return super.getWildcardQuery(field, termStr); 
} 
Các vấn đề liên quan