您的位置:首页 > 其它

[置顶] lucene6按照整形数据排序搜索结果

2017-03-16 19:32 260 查看
lucene6跟早期版本有蛮大的区别,这里给出一个按照整形排序的例子,希望帮到有需要的小伙伴:

Analyzer analyzer = new StandardAnalyzer();
// 1. create the index
Directory index = new RAMDirectory();

IndexWriterConfig config = new IndexWriterConfig(analyzer);

IndexWriter w = new IndexWriter(index, config);
addDoc(w, "Lucene in Action", "193398817",70);
addDoc(w, "lucene for Action", "55320055Z",80);
addDoc(w, "Managing Gigabytes", "55063554A",90);
addDoc(w, "The Art of Computer Science", "9900333X",50);
w.close();

TermQuery q1 = new TermQuery(new Term("title","Lucene in Action"));
Query q2 = IntPoint.newRangeQuery("price", 60, 100);
BooleanQuery q3 = new Builder().add(q1, Occur.SHOULD).add(q2, Occur.MUST).build();
//
QueryParser parser = new QueryParser("title",analyzer);
Query q4 = parser.parse("Lucene in Action");
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
//升序排列
TopDocs matches = searcher.search(q4, 10,new Sort(new SortField("price",SortField.Type.LONG,false)));
for(ScoreDoc doc:matches.scoreDocs){
logger.info("title:"+searcher.doc(doc.doc).get("title")+"\tisbn:"+searcher.doc(doc.doc).get("isbn")
+"\nprice:"+searcher.doc(doc.doc).get("price"));
}
index.close();

private static void addDoc(IndexWriter w, String title, String isbn,int price) throws IOException {
Document doc = new Document();
doc.add(new TextField("title", title,Field.Store.YES));
doc.add(new StringField("isbn", isbn, Field.Store.YES));
//使用IntPoint时需要同时创建同名NumericDocValuesField(排序用)以及同名StoredField对象
doc.add(new NumericDocValuesField("price",price));
doc.add(new IntPoint("price",price));
doc.add(new StoredField("price",price));
//doc.add(new LegacyIntField("price",price, Field.Store.YES));
w.addDocument(doc);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: