java搜索引擎能干什么?怎么用java 开发一个搜索引擎呀
大家好,感谢邀请,今天来为大家分享一下java搜索引擎能干什么的问题,以及和怎么用java 开发一个搜索引擎呀的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
怎么用java 开发一个搜索引擎呀
一.创建索引
1.一般创建索引的核心步骤
(1).创建索引写入对象IndexWriter:
IndexWriter indexWriter= new IndexWriter(INDEX_STORE_PATH,new StandardAnalyzer(),create);
参数说明:INDEX_STORE_PATH:索引文件存放路径
new StandardAnalyzer():分词工具
create:此参数为Boolean型,true表示重新创建整个索引,false表示增量式创建索引。
(2).创建文档模型,并用IndexWriter对象写入
Document doc= new Document();
Field field1= new Field(fieldName1, fieldValue,Field.Store.YES, Field.Index.TOKENIZED);
doc.add(field1);
Field field2= new Field(fieldName2, fieldValue,Field.Store.YES, Field.Index.TOKENIZED);
doc.add(field2);
……
indexWriter.addDocument(doc);
indexWriter.close();
参数说明:
Document:负责搜集数据源,它可以从不同的物理文件提取数据并放入同一个Document中或从一个物理文件中提取出不同的数据并放入同一个Document中。
如下图所示
Field:用来表示不同的数据源
fieldName1:表示field名称
fieldValue:表示field的值
Field.Store.YES,:表示是否在索引文件中完整的存储该值。
在创建索引时,有些内容需要以摘要的形式完整地或以片段的方式显示在页面上,来便于用户查找想要的记录,那么就应该选择存储,如果不需要完整或片段的显示就不需要存储。
Field.Index.TOKENIZED:表示是否索引和分词。
只要是需要当作关键字让用户查找的字段就需要建立索引。
在建立索引的过程中,如果像文章标题、文章内容这样的Field,一般是靠用户输入几个关键字来查询的,就应该选择分词。
如果需要用户输入完整字符也就是精确查找才能查询到的,例如:beanName,就可以不分词。
Document最直观的理解方式:
Document就相当于我们平台中的一个普通javaBean,,而Field就是javaBean中的一个属性。lucene搜索的机制就是靠搜索指定的Field的值,来得到含有要搜索内容的Document集合,所以问题的关键在于如何组织Document.
2.结合平台创建索引的思路
(1)经分析搜索元素应该由如下内容组成(Document的属性)
(2)数据库数据转化为Document的构造过程:
JavaBean/ Attachment→(Temp Object) BaseData→(Finally Object) Document
分析:
要建立索引的源数据分为两大部分:一个是数据库数据BeanData,另一个是附件数据FileData,这样可以建立一个抽象类BaseData,来存放它们共有的属性。同时为了管理这些相应的数据,在相同的等级结构上,建立了相应的管理类(xxxDataManager),对这些数据类的操作(建立或删除索引)进行管理,并用一个工厂类(DataManagerFactory)来创建所需要的管理类,IndexHelper用来充当整个索引模块对外的接口,为了实现一些与平台特定的业务,特用SupportManager来提供一些额外的业务支持,索引模块代码结构如下图所示。
二.搜索索引
1.lucene搜索的核心步骤:
String[]fields={“title”,“summary”,……};//要查找的field范围
BooleanClause.Occur[]flags={BooleanClause.Occur.SHOULD, BooleanClause.Occur.MUST,……};
Queryquery= MultiFieldQueryParser.parse(queryStr, fields,flags,new StandardAnalyzer());
Hitshits=newIndexSearcher(INDEX_STORE_PATH).search(query);
for(int i= 0;i< hitsLength; i++)
{
Document doc= hits.doc(i);
String title= doc.get(“title”);
String summary= doc.get(“summary”);
//搜索出来的结果高亮显示在页面上
if(title!= null){
TokenStream tokenStream= analyzer.tokenStream(“title”,new StringReader(title));
String highlighterValue= highlighter.getBestFragment(tokenStream, title);
if(highlighterValue!= null){
title= highlighterValue;
}
//log.info("SearchHelper.search.title="+title);
}
if(summary!= null){
TokenStream tokenStream= analyzer.tokenStream(“summary”,new StringReader(summary));
String highlighterValue= highlighter.getBestFragment(tokenStream, creator);
if(highlighterValue!= null){
summary= highlighterValue;
}
//log.info("SearchHelper.search. summary="+ summary);
}
}
2.结合平台构造搜索模块
PageData类用来存放检索结果集数据。
PageInfo类用来存放页面相关信息例如,PageData对象集合、总记录个数、每一页的记录数、总页面数量等等。
SearchHelper用来充当整个搜索模块的对外接口。
三.为平台组件添加索引的步骤(以知识中心为例)
1.在com.cscec.oa.searchengine.extend.module目录下添加一个新的package
例如:com.cscec.oa.searchengine.extend.module.resourcestore
2.在新的目录下建立data package并建立相应的数据类,并使这个数据类继承BeanData。
例如:
package com.cscec.oa.searchengine.extend.module.resourcestore.data
public class ResourceStoreBeanData extends BeanData{
}
3.与data package同一级目录建立manager package并建立相应管理类,并使这个管理类继承BeanDataManager
例如:
com.cscec.oa.searchengine.extend.module.resourcestore.manager
public class ResourceStoreBeanDataManagerImpl extends BeanDataManager{
}
4.以管理员的身份登陆OA后,在菜单中找到“索引模块管理”链接,将相应信息添加完成后,便可以在List页面点击“创建索引”对该模块的数据进行索引的建立,建立完成后便可以进行查询。
土木工程转行可以干些什么
第一条路,转行做造价。
一是坐办公室朝九晚五有双休的造价。这种造价工作环境好,有自己的生活,但是工资低,成长需要一定时间。
二是跟项目没有节假日的造价。这种造价除了不用风吹日晒、通宵打灰,基本也跟现场技术员差不多,但是学习一段时间后,再跳槽去甲方或者咨询单位会更容易。
整体的收入情况要看项目大小,按照每个人的贡献情况进行造价预算提成分配,大体来说比在现场薪酬更丰厚。
第二条路,招投标公司。
其实招投标跟造价算是同一条路,前期收入、待遇也很相似,成长时间较长。招投标工资不高,但一般都会有提成,所以标书做得越好,中标项目越多,提成也就越多。
至于工作时间,忙的时候非常忙,通宵做标书都是很常见的事,但是闲的时候也是真闲。
第三条路,跳槽去监理公司。
对于监理这个职业,我们要调整认识。有一个同学毕业就去了咨询公司当监理,用他的话说就是在工地只要低调一点,施工单位还是很客气的,吃的喝的不用愁,连烟都不用自己买,用来考证的时间也很多,等监理、一建、注安都考过了,也就不愁收入了。
第四条路,甲方或者设计院。
先说甲方,地方城投公司,薪资待遇方面还是比较好的。除了工程岗需要上工地,其他岗位是不用上一线的。所以综合职业发展和薪酬待遇来说,甲方是最好的选择。
但是这种甲方单位的要求比较高,至少都需要985、211大学本科毕业,甚至有些逼格比较高的更是要求同级别学校本、硕毕业,不是很好进。至于社招进甲方,这个难度会比应届毕业生更难,要么能力很强,要么执业资格证书比较多。
再说设计院,跟甲方一样,如果不是985、211大学毕业生,最好是不要去设计院。普通院校毕业生去大型设计院,基本都是劳务派遣,转正机会渺茫;去小型设计院,又是纯粹的画图民工,工资不高,活倒不少,万一哪天这个小院接不到项目了,那可能就要被裁了。
所以,如果你是985、211院校毕业生,能进大设计院做正式员工就去,做不了正式员工又没有转正机会的话,就别去了。
第五条路,考公务员。
工作越久,越觉得公务员香。为什么香?主要是稳定,标准的稳定,标准的朝九晚五。
考公是一条路,一条需要破釜沉舟的路,没有决心还是很难上岸的,希望走这条路的人不要三分钟热度。
第六条路,转行IT。
这条路应该是仅次于转行做造价的路,在工地上两年班,攒下十来万,突然觉得土木不适合自己,于是辞职报了一个IT培训班,几个月后就可以直接找互联网的工作了。
当然,也有人说IT行业并没有那么好,没有那么高的工资,还有35岁被裁的风险,也没有想象中的那么舒服,还要经常加班,还有传说中的996福报。
没有哪个行业是舒服钱又多的,所有的舒服和高收入都是相对的,都要看自己的选择。
学java需要什么基础
学java需要数据结构基础。要学好一门编程语言,数据结构是必不可少的知识,搞不清楚算法复杂度的程序员也就只能做做填空式的增删改查了。
一、掌握静态方法和属性
静态方法和属性用于描述某一类对象群体的特征,而不是单个对象的特征。Java中大量应用了静态方法和属性,这是一个通常的技巧。但是这种技巧在很多语言中不被频繁地使用。理解静态方法和属性对于理解类与对象的关系是十分有帮助的,在大量的Java规范中,静态方法和属性被频繁使用。
因此学习者应该理解静态方法和属性。Java在方法和属性的调用上是一致的,区别只表现在声明的时候,这和c++是不同的。
二、重视接口
在面向对象早期的应用中大量使用了类继承。随着软件工程理论的不断发展,人们开始意识到了继承的众多缺点,开始努力用聚合代替继承。软件工程解决扩展性的重要原则就是抽象描述,直接使用的工具就是接口。接口近年来逐渐成为Java编程方法的核心。
另一方面,就应用而言,大部分开发是建立在规范基础之上的,不需要自己建立复杂的继承关系和庞大的类。因此读懂规范和用好规范已经成为应用程序开发人员的首要任务,Java各项规范的主要描述手段就是接口。
三、学好集合框架
Java描述复杂数据结构的主要方式是集合框架。Java没有指针,而是通过强大的集合框架描述数组、对象数组等复杂的数据结构。学好这些数据结构的描述方法对于应用程序编写,特别是涉及到服务器方、3层结构编程至关重要。程序员在这个时候不能再用诸如数据库结果集之类的结构描述数据了。
由于很多语言没有这么强大的集合框架体系,很多初学者不知所措,更不知道拿来做什么用,因此应该引起足够的重视。
关于java搜索引擎能干什么和怎么用java 开发一个搜索引擎呀的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。