如何用java语言建立多个索引?

如何用java语言建立多个索引?,第1张

使用jdbc技术连接数据库

使用语句对象statement的execute方法可以执行对索引的 *** 作

例如代码如下

public class IndexFiles {

//使用方法:: IndexFiles [索引输出目录] [索引的文件列表] ...

public static void main(String[] args) throws Exception {

String indexPath = args[0]

IndexWriter writer

//用指定的语言分析器构造一个新的写索引器(第3个参数表示是否为追加索引)

writer = new IndexWriter(indexPath, new SimpleAnalyzer(), false)

for (int i=1i<args.lengthi++) {

System.out.println("Indexing file " + args[i])

InputStream is = new FileInputStream(args[i])

//构造包含2个字段Field的Document对象

//一个是路径path字段,不索引,只存储

//一个是内容body字段,进行全文索引,并存储

Document doc = new Document()

doc.add(Field.UnIndexed("path", args[i]))

doc.add(Field.Text("body", (Reader) new InputStreamReader(is)))

//将文档写入索引

writer.addDocument(doc)

is.close()

}

//关闭写索引器

writer.close()

}

}

public class Search {

public static void main(String[] args) throws Exception {

String indexPath = args[0], queryString = args[1]

//指向索引目录的搜索器

Searcher searcher = new IndexSearcher(indexPath)

//查询解析器:使用和索引同样的语言分析器

Query query = QueryParser.parse(queryString, "body",

new SimpleAnalyzer())

//搜索结果使用Hits存储

Hits hits = searcher.search(query)

//通过hits可以访问到相应字段的数据和查询的匹配度

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

System.out.println(hits.doc(i).get("path") + "Score: " +

hits.score(i))

}

}

}在整个检索过程中,语言分析器,查询分析器,甚至搜索器(Searcher)都是提供了抽象的接口,可以根据需要进行定制。

分 析:

索引过程中可以看到:

语言分析器提供了抽象的接口,因此语言分析(Analyser)是可以定制的,虽然lucene缺省提供了2个比较通用的分析器SimpleAnalyser和StandardAnalyser,这2个分析器缺省都不支持中文,所以要加入对中文语言的切分规则,需要修改这2个分析器。

Lucene并没有规定数据源的格式,而只提供了一个通用的结构(Document对象)来接受索引的输入,因此输入的数据源可以是:数据库,WORD文档,PDF文档,HTML文档……只要能够设计相应的解析转换器将数据源构造成成Docuement对象即可进行索引。

对于大批量的数据索引,还可以通过调整IndexerWrite的文件合并频率属性(mergeFactor)来提高批量索引的效率。

总 结:

搜索结果返回的是Hits对象,可以通过它再访问Document==>Field中的内容。假设根据body字段进行全文检索,可以将查询结果的path字段和相应查询的匹配度(score)打印出来,

JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)(Sun这样说的,专a‘hAzI件=JIy教我也不知道是不是真的),而且现在的JDBCnbsp3.0据Sun说也能访问Execel等电子表格程序!nbspJDBC对于数据库的访问有四种方式,我们这里只是介绍两种:nbsp第一种是通过ODBC做为“桥”(Bridge)对数据库访问,nbspIF=S专#“rI管jnbsp第二种是直接对数据库访问。nbsp我们先来看看第一种JDBClt--gtODBC访问的流程:nbspJDBCnbspDrivernbspMannager-gtJDBClt-gtODBC桥-gtODBC-gt数据库客户机驱动库-gt数据库服务器-gt返回查询结果,在这种访问中值的我们注意的是虽然JAVA是“WritenbspOncenbsp,RunnbspAnywhere“,但是如果通过这种访问的话,需要客户端必须设置ODBC和有相应的数据库客户机的驱动,当你看了下面的另外一个流程的时候或许你会想:明明下一种更方面,为什么还要有这个东西的产生!呵呵,因为,未必所有的数据库服务器提供商都提供下面的JDBC驱动程序(给JDBC访问提供相应的接口),所以就有了JDBClt-gtODBCnbspBridge。nbsp接着再让我们来看看第二种访问流程:nbspJDBCnbspDrivernbspMannager-gt局部JDBC驱动-gt客户端数据库-gt数据库服务器-gt返回查询结果,这种访问事实上是转换JDBC调用为相应的数据库(Oracle,nbspSybase,nbspInformix,nbspDB2,nbsp和其他的数据库数据库管理系统)的客户端API调用(这么说,不知道大家能不能懂,说简单点就好像ASP不是通过DSN对数据库访问而是通过OLEDB访问,说道这里我还是不知道大家能不能明白我的意思。哎呀,不要扔鸡蛋嘛!),这种方式的访问需要相应的数据库提供商提供相应的JDBC驱动程序,但是有一种好处,可以独立于odbc用于可以随处可Run的客户端的浏览器中的Applet程序。nbsp我们下面将给大家一个通过JDBC-ODBC桥数据库访问的实例,但是在看下面的事例前我想问大家一次:JDK1.3装了吗?数据库驱动装了吗(我使用的是SQLserver)?你该没有使用Linux吧?虽然java支持Linux,但是老兄我可没有使用Linux哟(这同JAVA的WritenbspOncenbsp,RunnbspAnywhere没有关系),


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10824038.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存