2011-07-24 39 views
6

Tôi cần so sánh mức độ liên quan của kết quả tìm kiếm giữa các truy vấn Lucene khác nhau.Lucene: so sánh kết quả giữa các truy vấn

Thực ra tôi có một bộ tài liệu văn bản được lập chỉ mục và khi tìm kiếm được thực hiện trên bộ này, tôi muốn trả lại không phải N kết quả tốt nhất từ ​​tập này nhưng tất cả kết quả phù hợp với truy vấn "đủ tốt".

Thông số "đủ tốt" này sẽ được định cấu hình (nói giữa 0 (tài liệu hoàn toàn không liên quan) và 1 (tài liệu phù hợp nhất có thể)) nhưng tôi muốn nó ảnh hưởng đến tất cả truy vấn theo cùng một cách.

Từ những gì tôi đã tìm thấy trên internet, nó không phải là một nhiệm vụ đơn giản. Ai có thể cho tôi một gợi ý về cách tiếp cận vấn đề này?

Cảm ơn rất nhiều!

+0

Bạn không chắc chắn ý của mình là gì? Bạn có muốn loại bỏ kết quả truy vấn không? Thật dễ dàng để làm điều đó với Solr. Với Lucene bạn cần phải viết một bộ sưu tập tùy chỉnh: xem tại đây http://stackoverflow.com/questions/2871558/remove-results-below-a-certain-score-threshold-in-solr-lucene – Mikos

+0

Cảm ơn Mikos, nhưng vì nó được viết trong nhận xét của Shashikant Kore ở đó, điểm số liên quan đến các truy vấn và do đó tôi không thể sử dụng cùng một ngưỡng để đo lường "sự tốt lành" của các kết quả trên nhiều truy vấn. Tôi đang xem xét cách bình thường hóa các điểm số bằng cách nào đó để các giá trị chuẩn hóa này có nghĩa là giống nhau về mặt "tốt lành" cho tất cả các truy vấn. – Serpenty

+0

ahh! Tôi nghĩ rằng tôi hiểu rõ hơn về câu hỏi của bạn, nhưng cảm thấy điều đó phù hợp hơn với số liệu thống kê so với Lucene. Bạn có thể muốn tra cứu ANOVA hoặc Chi bình phương trong các số liệu thống kê trong khi có thể giúp bạn xác định mức độ phù hợp giữa các truy vấn bằng cách sử dụng mảng kết quả điểm tài liệu. HTH. – Mikos

Trả lời

1

Thậm chí nếu bạn bình thường hóa các điểm đến a [0,1] khoảng thời gian, nó là rõ ràng không chính xác để so sánh điểm số của các truy vấn khác nhau, xem How to normalize Lucene scores?

0

Tôi chỉ tìm kiếm câu trả lời cho câu hỏi này tương tự. Đây là những gì tôi tìm thấy trong nhìn xung quanh:

Trong khi in general it is not possible to compare across queries, nếu bạn có các loại hạn chế nhất định của các truy vấn, chẳng hạn như một BooleanQuery gồm chỉ TermQuery s, sau đó it may be possible to compare results across queries if you disable the coord boost in the BooleanQuery constructor.

0

Nếu bạn muốn so sánh hai hoặc nhiều truy vấn, tôi đã tìm thấy giải pháp thay thế. Bạn có thể so sánh tài liệu được ghi điểm cao nhất với queryterm của mình bằng cách sử dụng lớp học LevenstheinDistance hoặc LuceneLevenstheinDistance (Damerau) để nhận khoảng cách giữa queryterm và kết quả của bạn.

Kết quả là sự giống nhau giữa chúng. Làm điều này cho mỗi truy vấn bạn muốn so sánh. Bây giờ bạn có một công cụ để so sánh các truy vấn của bạn bằng cách sử dụng tính tương tự của queryterm của bạn và kết quả cao nhất của bạn. Bây giờ bạn có thể chọn truy vấn có điểm tương đồng cao nhất và sử dụng số này cho các hành động thích hợp tiếp theo.

//Damerau LevenstheinDistance 
LuceneLevenshteinDistance d = new LuceneLevenshteinDistance(); 

similiarity = d.getDistance(queryterm, yourResult); 
+0

@piyushj Cảm ơn bạn đã sửa tôi btw :) – Blackeye

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