2012-03-22 23 views
8

Trong trường hợp của tôi, tài liệu có hai trường, ví dụ: "tiêu đề" và "chế độ xem". "lượt xem" được biểu thị số lần mọi người đã truy cập tài liệu này. như: "title": "iphone", "views": "10". Tôi phải phát triển một chiến lược sẽ gán một số trọng số cho các lượt xem, chẳng hạn như điểm số liên quan được tính theo điểm (tiêu đề) * 0,8 điểm (lượt xem) * 0,2. Lucene có thể làm được điều này không? Và tôi muốn biết liệu có một số thuật toán liên quan đến câu hỏi này hay không.Lucene: cách tăng cường một số trường cụ thể

Trả lời

10

Đây là cách bạn có thể làm điều đó: điểm

Query titleQuery, viewsQuery; 

titleQuery.setBoost(0.8); 
viewsQuery.setBoost(0.2); 
BooleanQuery query = new BooleanQuery(); 
query.add(titleQuery, Occur.MUST); // or Occur.SHOULD if this clause is optional 
query.add(viewsQuery, Occur.SHOULD); // or Occur.MUST if this clause is required 

// use query to search documents 

sẽ tỷ lệ thuận với 0.8*score(titleQuery) + 0.2*score(viewsQuery) (để một hằng số nhân).

Để tận dụng trường views của bạn, có thể bạn sẽ cần sử dụng ValueSourceQuery.

+0

nếu tôi hiểu nó correctyl setBoost đã không được chấp nhận và những ngày này https://lucene.apache.org/core/5_5_0/core/org/apache/lucene/search/BoostQuery.html shoudl được sử dụng – Dannyboy

5

Bạn có thể tăng theo 3 cách. Tùy thuộc vào nhu cầu của bạn, bạn có thể muốn sử dụng kết hợp

Tăng cấp tài liệu - trong khi lập chỉ mục - bằng cách gọi document.setBoost() trước khi thêm tài liệu vào chỉ mục.

Tăng cấp trường của tài liệu - trong khi lập chỉ mục - bằng cách gọi field.setBoost() trước khi thêm trường vào tài liệu (và trước khi thêm thêm tài liệu vào chỉ mục).

Tăng cấp truy vấn - trong khi tìm kiếm , bằng cách đặt tăng trên mệnh đề truy vấn, gọi Query.setBoost().

nguồn: http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html

+0

document.setBoost() không được dùng nữa từ lâu. – Dannyboy

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