Lucene检索数据库支持中文检索.docx

上传人:b****7 文档编号:11214307 上传时间:2023-02-25 格式:DOCX 页数:28 大小:29.29KB
下载 相关 举报
Lucene检索数据库支持中文检索.docx_第1页
第1页 / 共28页
Lucene检索数据库支持中文检索.docx_第2页
第2页 / 共28页
Lucene检索数据库支持中文检索.docx_第3页
第3页 / 共28页
Lucene检索数据库支持中文检索.docx_第4页
第4页 / 共28页
Lucene检索数据库支持中文检索.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

Lucene检索数据库支持中文检索.docx

《Lucene检索数据库支持中文检索.docx》由会员分享,可在线阅读,更多相关《Lucene检索数据库支持中文检索.docx(28页珍藏版)》请在冰豆网上搜索。

Lucene检索数据库支持中文检索.docx

Lucene检索数据库支持中文检索

全文分两部分:

一:

Lucene简介

    Lucene版本:

3.0.2

    全文检索大体分两个部分:

索引创建(Indexing)和搜索索引(Search)

    1.索引过程:

       1)有一系列被索引文件(此处所指即数据库数据)

       2)被索引文件经过语法分析和语言处理形成一系列词(Term)。

       3)经过索引创建形成词典和反向索引表。

       4)通过索引存储将索引写入硬盘。

   2.搜索过程:

      a)用户输入查询语句。

      b)对查询语句经过语法分析和语言分析得到一系列词(Term)。

      c)通过语法分析得到一个查询树。

      d)通过索引存储将索引读入到内存。

      e)利用查询树搜索索引,从而得到每个词(Term)的文档链表,对文档链表进行交,差,并得到结果文档。

      f)将搜索到的结果文档对查询的相关性进行排序。

      g)返回查询结果给用户。

 

 

  •索引过程如下:

      ◦创建一个IndexWriter用来写索引文件,它有几个参数,INDEX_DIR就是索引文件所存放的位置,Analyzer便是用来对文档进行词法分析和语言处理的。

      ◦创建一个Document代表我们要索引的文档。

      ◦将不同的Field加入到文档中。

我们知道,一篇文档有多种信息,如题目,作者,修改时间,内容等。

不同类型的信息用不同的Field来表示,在本例子中,一共有两类信息进行了索引,一个是文件路径,一个是文件内容。

其中FileReader的SRC_FILE就表示要索引的源文件。

      ◦IndexWriter调用函数addDocument将索引写到索引文件夹中。

  •搜索过程如下:

      ◦IndexReader将磁盘上的索引信息读入到内存,INDEX_DIR就是索引文件存放的位置。

      ◦创建IndexSearcher准备进行搜索。

      ◦创建Analyer用来对查询语句进行词法分析和语言处理。

      ◦创建QueryParser用来对查询语句进行语法分析。

      ◦QueryParser调用parser进行语法分析,形成查询语法树,放到Query中。

      ◦IndexSearcher调用search对查询语法树Query进行搜索,得到结果TopScoreDocCollector。

二:

代码示例(本文重点部分)

     1)首先是连接数据库的jdbc配置文件信息以及存放索引文件的路径配置信息

Test.properties代码

 

1.jdbc.driverClassName = com.mysql.jdbc.Driver  

2.jdbc.url = jdbc:

mysql:

//192.168.0.1/dbname?

autoReconnect=true&characterEncoding=utf8  

3.jdbc.username = root  

4.jdbc.password = password  

5.jdbc.maxIdle = 2  

6.jdbc.maxActive = 4  

7.jdbc.maxWait = 5000  

8.jdbc.validationQuery = select 0  

9.res.index.indexPath = D\:

\\apache-tomcat-6.0.18\\webapps\\test\\testHome\\search\\res\\index1  

10.res.index.mainDirectory = D\:

\\apache-tomcat-6.0.18\\webapps\\test\\testHome\\search\\res  

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:

mysql:

//192.168.0.1/dbname?

autoReconnect=true&characterEncoding=utf8

jdbc.username=root

jdbc.password=password

jdbc.maxIdle=2

jdbc.maxActive=4

jdbc.maxWait=5000

jdbc.validationQuery=select0

res.index.indexPath=D\:

\\apache-tomcat-6.0.18\\webapps\\test\\testHome\\search\\res\\index1

res.index.mainDirectory=D\:

\\apache-tomcat-6.0.18\\webapps\\test\\testHome\\search\\res

    2)读取资源文件的工具类:

Java代码

 

1.package mon;  

2.  

3.import java.io.IOException;  

4.import java.io.InputStream;  

5.import java.util.HashMap;  

6.import java.util.Map;  

7.import java.util.Properties;  

8.  

9./**   

10. * PropertiesUtil.java 

11. * @version 1.0 

12. * @createTime 读取配置文件信息类 

13. */  

14.public class PropertiesUtil {  

15.  

16.    private static String defaultPropertyFilePath = "/test.properties";  

17.      

18.    private static Map ppsMap = new HashMap();  

19.      

20.    /** 

21.     * 读取默认文件的配置信息,读key返回value 

22.     * @param key 

23.     * @return value 

24.     */  

25.    public static final String getPropertyValue(String key) {  

26.        Properties pps = getPropertyFile(defaultPropertyFilePath);  

27.        return pps == null ?

 null :

 pps.getProperty(key);  

28.    }  

29.      

30.    /** 

31.     * 传入filePath读取指定property文件,读key返回value 

32.     * @param propertyFilePath 

33.     * @param key 

34.     * @return value 

35.     */  

36.    public static String getPropertyValue(String propertyFilePath,String key) {  

37.        if(propertyFilePath == null) {  

38.            propertyFilePath = defaultPropertyFilePath;  

39.        }  

40.        Properties pps = getPropertyFile(propertyFilePath);  

41.        return pps == null ?

 null :

 pps.getProperty(key);  

42.    }  

43.      

44.    /** 

45.     * 根据path返回property文件,并保存到HashMap中,提高效率 

46.     * @param propertyFilePath 

47.     * @return 

48.     */  

49.    public static Properties getPropertyFile(String propertyFilePath) {  

50.        if(propertyFilePath == null) {  

51.            return null;  

52.        }  

53.        Properties pps = ppsMap.get(propertyFilePath);  

54.        if(pps == null) {  

55.            InputStream in = PropertiesUtil.class.getResourceAsStream(propertyFilePath);  

56.            pps = new Properties();  

57.            try {  

58.                pps.load(in);  

59.            } catch (IOException e) {  

60.                e.printStackTrace();  

61.            }  

62.            ppsMap.put(propertyFilePath, pps);  

63.        }  

64.          

65.        return pps;  

66.    }  

67.}  

packagemon;

importjava.io.IOException;

importjava.io.InputStream;

importjava.util.HashMap;

importjava.util.Map;

importjava.util.Properties;

/**

*PropertiesUtil.java

*@version1.0

*@createTime读取配置文件信息类

*/

publicclassPropertiesUtil{

privatestaticStringdefaultPropertyFilePath="/test.properties";

privatestaticMapppsMap=newHashMap();

/**

*读取默认文件的配置信息,读key返回value

*@paramkey

*@returnvalue

*/

publicstaticfinalStringgetPropertyValue(Stringkey){

Propertiespps=getPropertyFile(defaultPropertyFilePath);

returnpps==null?

null:

pps.getProperty(key);

}

/**

*传入filePath读取指定property文件,读key返回value

*@parampropertyFilePath

*@paramkey

*@returnvalue

*/

publicstaticStringgetPropertyValue(StringpropertyFilePath,Stringkey){

if(propertyFilePath==null){

propertyFilePath=defaultPropertyFilePath;

}

Propertiespps=getPropertyFile(propertyFilePath);

returnpps==null?

null:

pps.getProperty(key);

}

/**

*根据path返回property文件,并保存到HashMap中,提高效率

*@parampropertyFilePath

*@return

*/

publicstaticPropertiesgetPropertyFile(StringpropertyFilePath){

if(propertyFilePath==null){

returnnull;

}

Propertiespps=ppsMap.get(propertyFilePath);

if(pps==null){

InputStreamin=PropertiesUtil.class.getResourceAsStream(propertyFilePath);

pps=newProperties();

try{

pps.load(in);

}catch(IOExceptione){

e.printStackTrace();

}

ppsMap.put(propertyFilePath,pps);

}

returnpps;

}

}

     3)Jdbc连接数据库获取Connection工具类,不做分析,直接上代码

Java代码

 

1.package mon;  

2.  

3.import java.sql.Connection;  

4.import java.sql.DriverManager;  

5.import java.sql.ResultSet;  

6.import java.sql.SQLException;  

7.import java.sql.Statement;  

8.  

9./**   

10. * JdbcUtil.java 

11. * @version 1.0 

12. * @createTime JDBC获取Connection工具类 

13. */  

14.public class JdbcUtil {  

15.      

16.    private static Connection conn = null;  

17.      

18.    private static final String URL;  

19.      

20.    private static final String JDBC_DRIVER;  

21.      

22.    private static final String USER_NAME;  

23.      

24.    private static final String PASSWORD;  

25.      

26.    static {  

27.        URL = PropertiesUtil.getPropertyValue("jdbc.url");  

28.        JDBC_DRIVER = PropertiesUtil.getPropertyValue("jdbc.driverClassName");  

29.        USER_NAME = PropertiesUtil.getPropertyValue("jdbc.username");  

30.        PASSWORD = PropertiesUtil.getPropertyValue("jdbc.password");  

31.    }  

32.      

33.    public static Connection getConnection() {  

34.        try {  

35.            Class.forName(JDBC_DRIVER);  

36.            conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);  

37.        } catch (ClassNotFoundException e) {  

38.            e.printStackTrace();  

39.        } catch (SQLException e) {  

40.            e.printStackTrace();  

41.        }  

42.        return conn;  

43.    }  

44.      

45.}  

packagemon;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

/**

*JdbcUtil.java

*@version1.0

*@createTimeJDBC获取Connection工具类

*/

publicclassJdbcUtil{

privatestaticConnectionconn=null;

privatestaticfinalStringURL;

privatestaticfinalStringJDBC_DRIVER;

privatestaticfinalStringUSER_NAME;

privatestaticfinalStringPASSWORD;

static{

URL=PropertiesUtil.getPropertyValue("jdbc.url");

JDBC_DRIVER=PropertiesUtil.getPropertyValue("jdbc.driverClassName");

USER_NAME=PropertiesUtil.getPropertyValue("jdbc.username");

PASSWORD=PropertiesUtil.getPropertyValue("jdbc.password");

}

publicstaticConnectiongetConnection(){

try{

Class.forName(JDBC_DRIVER);

conn=DriverManager.getConnection(URL,USER_NAME,PASSWORD);

}catch(ClassNotFoundExceptione){

e.printStackTrace();

}catch(SQLExceptione){

e.printStackTrace();

}

returnconn;

}

}

    4)万事具备,只欠东风了,下面是核心部分,方法都有注释,不多说了,一步步来,我想肯定是没有问题的。

代码如下:

Java代码

 

1.package com.test.lucene.logic;  

2.  

3.import java.io.File;  

4.import java.sql.Connection;  

5.import java.sql.ResultSet;  

6.import java.sql.Statement;  

7.import java.util.ArrayList;  

8.import java.util.List;  

9.  

10.import org.apache.lucene.analysis.Analyzer;  

11.import org.apache.lucene.document.Document;  

12.import org.apache.lucene.document.Field;  

13.import org.apache.lucene.document.Field.TermVector;  

14.import org.apache.lucene.index.IndexWriter;  

15.import org.apache.lucene.queryParser.QueryParser;  

16.import org.apache.lucene.search.IndexSearcher;  

17.import org.apache.lucene.search.Query;  

18.import org.apache.lucene.search.ScoreDoc;  

19.import org.apache.lucene.search.Searcher;  

20.import org.apache.lucene.search.TopDocs;  

21.import org.apache.lucene.store.Directory;  

22.import org.apache.lucene.store.FSDirectory;  

23.import org.apache.lucene.util.Version;  

24.import org.wltea.analyzer.lucene.IKAnalyzer;  

25.import 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1