Lucene使用Sort方法对文档进行排序

/*

* 这段代码使用的是Lucene对于文档排序使用的sort方法

* 这里可以使用多个sort的构造方法,来自己定义,所想要实现的功能。

* */

package score;

import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import org.apache.lucene.document.Document;

import org.apache.lucene.document.Field;

import org.apache.lucene.index.IndexWriter;

import org.apache.lucene.index.Term;

import org.apache.lucene.search.Hits;

import org.apache.lucene.search.IndexSearcher;

import org.apache.lucene.search.Sort;

import org.apache.lucene.search.TermQuery;

public class SortScore {

public SortScore(String INDEX_STORE_PATH){

try{

IndexWriter writer = new IndexWriter(INDEX_STORE_PATH, new StandardAnalyzer(), true);

writer.setUseCompoundFile(false);

//首先定义文本

Document doc1 = new Document();

Field f1 = new Field("bookNumber", "0000001", Field.Store.YES, Field.Index.UN_TOKENIZED);

Field f2 = new Field("bookname", "钢铁是怎样炼成的", Field.Store.YES, Field.Index.TOKENIZED);

Field f3 = new Field("publishdate", "1970-01-01", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc1.add(f1);

doc1.add(f2);

doc1.add(f3);

Document doc2 = new Document();

f1 = new Field("bookNumber", "0000002", Field.Store.YES, Field.Index.UN_TOKENIZED);

f2 = new Field("bookname", "钢铁战士", Field.Store.YES, Field.Index.TOKENIZED);

f3 = new Field("publishdate", "1980-01-01", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc2.add(f1);

doc2.add(f2);

doc2.add(f3);

Document doc3 = new Document();

f1 = new Field("bookNumber", "0000003", Field.Store.YES, Field.Index.UN_TOKENIZED);

f2 = new Field("bookname", "篱笆女人和狗", Field.Store.YES, Field.Index.TOKENIZED);

f3 = new Field("publishdate", "1990-01-01", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc3.add(f1);

doc3.add(f2);

doc3.add(f3);

Document doc4 = new Document();

f1 = new Field("bookNumber", "0000004", Field.Store.YES, Field.Index.UN_TOKENIZED);

f2 = new Field("bookname", "女人是水做的", Field.Store.YES, Field.Index.TOKENIZED);

f3 = new Field("publishdate", "1999-01-01", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc4.add(f1);

doc4.add(f2);

doc4.add(f3);

Document doc5 = new Document();

f1 = new Field("bookNumber", "0000005", Field.Store.YES, Field.Index.UN_TOKENIZED);

f2 = new Field("bookname", "英雄儿女", Field.Store.YES, Field.Index.TOKENIZED);

f3 = new Field("publishdate", "2002-01-01", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc5.add(f1);

doc5.add(f2);

doc5.add(f3);

Document doc6 = new Document();

f1 = new Field("bookNumber", "0000006", Field.Store.YES, Field.Index.UN_TOKENIZED);

f2 = new Field("bookname", "白毛女", Field.Store.YES, Field.Index.TOKENIZED);

f3 = new Field("publishdate", "1985-01-01", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc6.add(f1);

doc6.add(f2);

doc6.add(f3);

Document doc7 = new Document();

f1 = new Field("bookNumber", "0000007", Field.Store.YES, Field.Index.UN_TOKENIZED);

f2 = new Field("bookname", "我的兄弟和女儿", Field.Store.YES, Field.Index.TOKENIZED);

f3 = new Field("publishdate", "1978-01-01", Field.Store.YES, Field.Index.UN_TOKENIZED);

doc7.add(f1);

doc7.add(f2);

doc7.add(f3);

//将书信息加入索引

writer.addDocument(doc1);

writer.addDocument(doc2);

writer.addDocument(doc3);

writer.addDocument(doc4);

writer.addDocument(doc5);

writer.addDocument(doc6);

writer.addDocument(doc7);

writer.close();

IndexSearcher searcher = new IndexSearcher(INDEX_STORE_PATH);

TermQuery q = new TermQuery(new Term("bookname", "女"));

//使用sort。RELEVANCE来制定排序的准则

Hits hits = searcher.search(q, Sort.RELEVANCE);

for(int i = 0; i < hits.length(); i++){

Document doc = hits.doc(i);

System.out.print("书名 :");

System.out.println(doc.get("bookname"));

System.out.print("得分 :");

System.out.println(hits.score(i));

System.out.print("内部ID :");

System.out.println(hits.id(i));

System.out.print("书号 : ");

System.out.println(doc.get("bookNumber"));

System.out.print("发行日期 : ");

System.out.println(doc.get("publishdate"));

System.out.println("===========================");

}

}catch(IOException e){

e.printStackTrace();

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

SortScore ss = new SortScore("E:\\Lucene项目\\索引文件");

}

}

结果显示排序后的截图:

时间: 2024-10-29 16:20:30

Lucene使用Sort方法对文档进行排序的相关文章

js 排序:sort()方法、冒泡排序、二分法排序。

js中的排序,这里介绍三种,sort()方法.冒泡排序.二分法排序. 1.sort方法 写法:  数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的字符编码大小排序. 写法2: 数组.sort(function(a,b){ return a-b }); 表示从大到小,(如果写 retrun b-a 则由大到小排序): 不详细解释了. 2.冒泡排序. 原理是,直接将原理可能不好懂,我们还是按照下面的方法去讲吧,这样容易懂些. //冒泡排序func

Spring+Swagger文档无法排序问题解决

项目中用到swagger用于自动生成文档,遇到了好多结合后的问题.而对于这个排序问题,在查看了后端Swagger原代码之后,发现视乎当前使用的swagger(不是springfox,应该不是官方的,网上好多教程是spring结合swagger,直接拿来用了)虽然有排序的Reader但是都没有实现文档的排序. 要实现排序可以从SwaggerUi入手.在: window.swaggerUi = new SwaggerUi({ ... }); 上面代码中,我们添加排序属性: window.swagge

关于微信二次分享,描述变链接的解决方法(一)----文档说明

http://www.cnblogs.com/joshua317/p/4761948.html 前言: 最近工作中遇到了使用微信二次分享的时候,标题被截短,描述也变成了链接,图片也没有,运营人员半夜还在嚷嚷,无奈只好硬着头皮去百度,去google,但是悲催的是没有详细的解决方法,最终只能自己去研究,还好最终搞出来了,决定分享一下,帮助需要的人.博文,分两篇,第一篇主要是微信的官方文档说明,第二篇主要是代码部分: 一.微信JS-SDK说明文档 1.概述 微信JS-SDK是微信公众平台面向网页开发者

使用Lucene对预处理后的文档进行创建索引(可执行)

时间: 2015/3/18 杨鑫newlife 对于文档的预处理后.就要開始使用Lucene来处理相关的内容了. 这里使用的Lucene的过程例如以下: 首先要为处理对象机那里索引 二是构建查询对象 三是在索引中查找 这里的代码是处理创建索引的部分 代码: package ch2.lucenedemo.process; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import jav

JAVADOC 常见使用方法 帮助文档

我们知道Java中有三种注释语句: 1.//用于单行注释. 2./*...*/用于多行注释,从/*开始,到*/结束,不能嵌套. 3./**...*/则是为支持jdk工具javadoc.exe而特有的注释语句. javadoc工具能从java源文件中读取第三种注释,并能识别注释中用@标识的一些特殊变量(见表),制作成Html格式的类说明文档. javadoc不但能对一个java源文件生成注释文档,而且能对目录和包生成交叉链接的html格式的类说明文档,十分方便. 注释中可以出现的关键字,以@开头:

使用Lucene对预处理后的文档进行创建索引(可运行)

时间: 2015/3/18 杨鑫newlife 对于文档的预处理后,就要开始使用Lucene来处理相关的内容了. 这里使用的Lucene的步骤如下: 首先要为处理对象机那里索引 二是构建查询对象 三是在索引中查找 这里的代码是处理创建索引的部分 代码: package ch2.lucenedemo.process; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.

Word在试图打开文件时遇到错误请尝试下列方法 *检查文档或驱动器的文件权限*确保有足够的内存和磁盘空间,

可能存在两种可能: 下载保存过程中,该文件损坏,导致无法打开: 文件安全性问题,可以打开Word 2013或Excel 2013,依次点击"文件→选项→信任中心→信任中心设置→受保护的视图",取消受保护的视图标签下的三个复选框的勾选,或者通过简单的操作解除某个文件的锁定.右键点击您的Word文档并点击属性,在文件的属性窗口中,点击"解除锁定.

显示XML文档时排序数据

先看XML文档: 也可拷贝下面代码另存为XMl文档: <stepList> <steps> <step> <order>1</order> <stepName>基丰盛的</stepName> </step> <step> <order>3</order> <stepName>个个个个</stepName> </step> <step&

C#连接各种数据库的方法(文档)

1.C#连接连接Access程序代码: ------------------------------------------------------------------------------- using System.Data;using System.Data.OleDb; ...... string strConnection="Provider=Microsoft.Jet.OleDb.4.0;";[email protected]"Data Source=C:\