2013-09-07 36 views
8

Trong khi cố gắng nâng cấp từ Solr 4.3.0 đến 4.4.0 Solr Tôi chạy vào ngoại lệ này:Solr 4.4: StopFilterFactory và enablePositionIncrements

java.lang.IllegalArgumentException: enablePositionIncrements=false is not supported anymore as of Lucene 4.4 as it can create broken token streams 

đó dẫn tôi đến this issue. Tôi cần để có thể phù hợp với các truy vấn không phụ thuộc vào các từ dừng can thiệp (được sử dụng để làm việc với enablePositionIncrements = "true"). Ví dụ: "foo của thanh" sẽ tìm thấy tài liệu khớp với "foo bar", "foo of bar" và "foo của thanh". Với tùy chọn này không được chấp nhận trong 4.4.0, tôi không rõ ràng về cách duy trì chức năng tương tự.

Các package javadoc cho biết thêm:

Nếu phân tích chọn lọc các từ dừng "là" và "the", sau đó cho một tài liệu có chứa chuỗi "màu xanh là bầu trời", chỉ có thẻ "màu xanh" , "bầu trời" được lập chỉ mục, với vị trí ("bầu trời") = 3 + vị trí ("màu xanh"). Bây giờ, một truy vấn cụm từ "blue là bầu trời" sẽ tìm thấy tài liệu đó, bởi vì cùng một bộ phân tích lọc các từ dừng giống nhau từ truy vấn đó. Nhưng truy vấn cụm từ "bầu trời xanh" sẽ không tìm thấy tài liệu đó vì vị trí tăng giữa "màu xanh" và "bầu trời" chỉ là 1.

Nếu hành vi này không phù hợp với nhu cầu ứng dụng, trình phân tích truy vấn cần phải được định cấu hình để không tính gia tăng vị trí khi tạo truy vấn cụm từ.

Nhưng không có đề cập đến cách thực sự định cấu hình trình phân tích truy vấn để thực hiện việc này. Có ai biết làm thế nào để đối phó với vấn đề này như Solr di chuyển về phía 5.0?

+0

bạn đã tìm thấy các giải pháp của vấn đề này? –

+0

@VishalParekh nope - chưa tìm được giải pháp nào ... – condit

+0

@condit Tôi gặp vấn đề tương tự, tôi đã suy nghĩ về việc triển khai lại 'StopFilterFactory' và bật lại tùy chọn để đặt' enablePositionIncrements' thành false – MoustafaAAtta

Trả lời

0

Bạn có thể sử dụng sự gần gũi tìm kiếm:

"foo bar"~2 
+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. – diosney

+0

đã xóa câu hỏi tu từ :) –

0

Tôi không biết nếu điều này được khuyến khích để sử dụng, nhưng vẫn còn một số lớp kế thừa trong Lucene 5, chẳng hạn như Lucene43StopFilter.

Đáng tiếc là họ dường như đã biến mất trong Lucene 6 ...

0

tôi thấy ở đâu đó về việc thực hiện ròng RemoveTokenGapsFilterFactory

public final class RemoveTokenGapsFilter extends TokenFilter { 

    private final PositionIncrementAttribute posIncrAttribute = addAttribute(PositionIncrementAttribute.class); 

    public RemoveTokenGapsFilter(TokenStream input) { 
     super(input); 
    } 

    @Override 
    public boolean incrementToken() throws IOException { 

     if (input.incrementToken()) { 
      posIncrAttribute.setPositionIncrement(1); 
      return true; 
     } 

     return false; 
    } 
}