2012-03-22 19 views
8

Durumumda, belgelerin iki alanı vardır, örneğin "başlık" ve "görünümler". "views", kullanıcıların bu belgeyi ziyaret ettikleri sayıyı temsil eder. gibi: "title": "iphone", "views": "10". İlgi puanının skor (başlık) * 0.8 + puan (görünümler) * 0.2 ile hesaplanması gibi görünümlere bazı ağırlıklar atayacak bir strateji geliştirmem gerekiyor. Lucene bunu yapabilir mi? Ve bu soruyla ilgili bazı algoritmalar olup olmadığını bilmek istiyorum.Lucene: Bazı belirli alanları nasıl desteklenir

cevap

10

bunu yapabilir nasıl:

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 

puanı (çarpımsal sabite) 0.8*score(titleQuery) + 0.2*score(viewsQuery) orantılı olacaktır.

views alanınızdan yararlanabilmek için, muhtemelen bir ValueSourceQuery kullanmanız gerekir.

+0

eğer bunu anladığımda, trueyl setBoost kullanımdan kaldırıldı ve bu günlerde https://lucene.apache.org/core/5_5_0/core/org/apache/lucene/search/BoostQuery.html shoudl kullanıldı – Dannyboy

5

3 şekilde hızlandırabilirsiniz. iken indeksleme - - Bir belge dizine eklenmeden önce() document.setBoost arayarak ihtiyaçlarınıza bağlı olarak bir bileşimi artırma

Belge seviyesini istihdam isteyebilirsiniz. İndekslerken - - artırılması

Belgenin Saha seviyesi belgeye bir alan eklemeden önce field.setBoost() çağırarak (ve endeksine belgeyi eklemeden önce).

Sorgulama düzeyi yükseltmesi - Query.setBoost() öğesini aratarak, bir sorgu tümcesinde artış ayarlayarak, araması sırasında.

kaynak: http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html İşte

+0

document.setBoost() uzun zaman önce kullanımdan kaldırılmıştır. – Dannyboy

İlgili konular