【发布时间】:2014-02-23 02:49:21
【问题描述】:
如何根据开始日期在 lucene 中实现评分和排序。
最晚开始日期的活动应首先显示在搜索结果中。我正在使用 lucene Version.LUCENE_44
我已从数据库中检索数据并存储在 Lucene 文档中,
public static Document createDoc(Event e) {
Document d = new Document();
//event id
d.add(new StoredField("id", e.getId()));
//event name
d.add(new StoredField("eventname", e.getEName());
TextField field = new TextField("enameSrch", e.getEName(), Store.NO);
field.setBoost(10.0f);
d.add(field);
//event owner
d.add(new StoredField("eventowner", e.getEOwner());
//event start date
d.add(new LongField("edateSort", Long.MAX_VALUE-e.getEStartTime(), Store.YES));
//event tags
if (e.eventTags()!=null) {
field = new TextField("eTagSrch", e.getTags(), Store.NO);
field.setBoost(5.0f);
d.add(field);
d.add(new StoredField("eTags", e.getTags()));
}
在搜索时,我正在做,
public List search(String srchTxt){
PhraseQuery enameQuery = new PhraseQuery();
Term term = new Term("enameSrch", srchTxt.toLowerCase());
enameQuery .add(term);
PhraseQuery etagQuery = new PhraseQuery();
term = new Term("eTagSrch", srchTxt.toLowerCase());
etagQuery.add(term);
BooleanQuery b= new BooleanQuery();
b.add(enameQuery , Occur.SHOULD);
b.add(etagQuery , Occur.SHOULD);
SortField startField = new SortField("edateSort", Type.LONG);
SortField scoreField = SortField.FIELD_SCORE;
Sort sort = new Sort(scoreField, startField);
TopFieldDocs tfd = searcher.search(b, 10, sort);
ScoreDoc[] myscore= tfd.scoreDocs;
换种说法:我想按日期对文档进行排序,该日期作为长字段存储在我的文档中(参见上面的代码)
【问题讨论】:
-
谁能帮我解决这个问题...
-
请改写你的问题..有点难以理解。