2012-04-27 24 views
8

Tôi có hai tài liệu và sử dụng Luke để điều tra, tôi đã xác nhận bằng mã rằng nó có cùng hành vi, sử dụng StandardAnalyzer.Lucene .net Boost không hoạt động khi sử dụng * wildcard

Document một với tăng 1

stored/uncompressed,indexed,tokenized<Description:Nummer ett> 
stored/uncompressed,indexed,tokenized<Id:2> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

Document hai với tăng 2

stored/uncompressed,indexed,tokenized<Description:Nummer två> 
stored/uncompressed,indexed,tokenized<Id:1> 
stored/uncompressed,indexed,tokenized<Name:Apa> 

Tìm kiếm apa trong lĩnh vực Tên Returns với đẩy mạnh sử dụng và theo đúng thứ tự.

Document 2 has Score 1,1891 
Document 1 has Score 0.5945 

Tìm ap * Returns không theo thứ tự và cùng số điểm

Document 1 Score 1.0000 
Document 2 Score 1.0000 

Tìm kiếm apa * Returns không theo thứ tự và cùng ghi

Document 1 Score 1.0000 
Document 2 Score 1.0000 

Tại sao điều này? Tôi muốn trả lại một số tài liệu có giá trị tăng cao hơn ngay cả khi tôi phải sử dụng ký tự đại diện. Điều này có thể không?

Chúc mừng tất cả các lập trình viên tuyệt vời!

Đây là những gì tôi muốn đồng ý.

Chuỗi tìm kiếm và muốn khớp. Sử dụng ký tự đại diện. tìm kiếm "Lu" + "*"

Document 
Name 
City 

Tôi muốn các tài liệu có tên là Lund để có được đánh giá cao hơn so với các tài liệu với tên Lunt hoặc City là Lund ví dụ. Điều này là do tôi sẽ biết những tài liệu nào phổ biến nhất. Tôi muốn lấy các tài liệu với thành phố Stockholm và đặt tên Stockholm và Stockholmen nhưng đã ra lệnh khi tôi chọn.

Trả lời

10

Kể từ WildcardQuery là một lớp con của MultiTermQuery bạn đang nhận được số điểm liên tục của 1.

Nếu bạn đánh dấu vào định nghĩa của t.getBoost():

t.getBoost() được một tăng thời gian tìm kiếm của t hạn trong truy vấn q là được chỉ định trong văn bản truy vấn (xem cú pháp truy vấn) hoặc được đặt bởi cuộc gọi ứng dụng tới setBoost(). Lưu ý rằng thực sự không có API trực tiếp để truy cập tăng một cụm từ trong truy vấn nhiều cụm từ, nhưng thay vì nhiều cụm từ được biểu diễn trong truy vấn dưới dạng đối tượng đa truy vấn và do đó có thể truy cập được cụm từ trong truy vấn bởi gọi getBoost sub-query()

http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/search/Similarity.html#formula_termBoost

một thể hack có thể được thiết lập phương pháp viết lại các phân tích cú pháp truy vấn:

myCustomQueryParser.SetMultiTermRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE) 
+0

Đây là một câu trả lời tôi ha d rất khó khăn thời gian để tìm cả hai tìm kiếm trong cuốn sách và tìm kiếm. Cảm ơn bạn, nó sẽ được dễ dàng hơn nhiều để giải quyết vấn đề biết làm thế nào nó hoạt động. – JustusTh

+0

@JustusTh Tốt để biết rằng nó đã giúp bạn. – ZeNo

+0

Nó đã giúp đỡ nhưng có lẽ không phải tất cả các cách nào được nêu ra, sẽ làm việc trên nó. Tôi mặc dù nó sẽ đơn giản bởi vì vấn đề của tôi là một cái gì đó tôi nghĩ rằng nhiều người sẽ muốn. – JustusTh

Các vấn đề liên quan