- 浏览: 319659 次
- 性别:
- 来自: 重庆
-
文章分类
- 全部博客 (286)
- 设计模式 (14)
- spring (5)
- 开发工具 (12)
- java (19)
- apache.commons工具 (7)
- ibaits (5)
- extjs4.0 (4)
- 数据库 (2)
- spring工具类 (2)
- jquery1.8 (32)
- 杂记 (1)
- linux (2)
- Quart (1)
- springMVC (2)
- webservice (1)
- oracle (5)
- dwr (6)
- jbmp3 (27)
- lucene3.5 (27)
- javascript (18)
- hibernate3.3.2 (27)
- spring事务管理 (10)
- nio (2)
- strust2 (3)
- jvm (7)
- jquery-easyui-1.2.6 (22)
- 多线程 (14)
- maven (3)
- 常用正则表达式 (4)
最新评论
-
HF_SKY000:
请问:
一、能否提供一下密钥库文件的生成方法?
二、密钥库的密 ...
Java sslSocket 聊天实例
public class LuceneContext {
private static LuceneContext instance;
private static final String INDEX_PATH = "d:/lucene/test";
private static IndexWriter writer;
private static Analyzer analyzer;
private static Version version;
private static NRTManager nrtMgr;
private static SearcherManager mgr;
private static Directory directory;
private LuceneContext(){}
public static LuceneContext getInstance() {
if(instance==null){
System.out.println("init");
init();
instance = new LuceneContext();
}
return instance;
}
private static void init() {
try {
directory = FSDirectory.open(new File(INDEX_PATH));
version = Version.LUCENE_35;
String dicUrl = LuceneContext.class.getClassLoader().getResource("data").getPath();
analyzer = new MMSegAnalyzer(dicUrl);
writer = new IndexWriter(directory,new IndexWriterConfig(version,analyzer));
nrtMgr = new NRTManager(writer, new SearcherWarmer() {
@Override
public void warm(IndexSearcher arg0) throws IOException {
System.out.println("reopen index");
}
});
mgr = nrtMgr.getSearcherManager(true);
NRTManagerReopenThread reopenThread = new NRTManagerReopenThread(nrtMgr, 5.0,0.025);
reopenThread.setName("NRTManager reopen thread");
reopenThread.setDaemon(true);
reopenThread.start();
} catch (IOException e) {
e.printStackTrace();
}
}
public IndexSearcher getSearcher() {
return mgr.acquire();
}
public void releaseSearcher(IndexSearcher searcher) {
try {
mgr.release(searcher);
} catch (IOException e) {
e.printStackTrace();
}
}
public void commitIndex() {
try {
writer.commit();
writer.forceMerge(3);
} catch (CorruptIndexException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public NRTManager getNRTManager() {
return nrtMgr;
}
public Version getVersion() {
return version;
}
public Analyzer getAnalyzer() {
return analyzer;
}
}
public class IndexField {
private String id;
private String title;
private List<String> content;
private List<String> atths;
private int parentId;
private int objId;
private Date createDate;
private String type;
public class Index {
private int msgId;
private String title;
private String summary;
private Date createDate;
@Entity
@Table(name="temp_index")
public class TempIndex {
private int id;
private int objId;
private String type;//Message,Attachment
private int operator;
@Service("indexService")
public class IndexService implements IIndexService {
private Document field2Doc(IndexField field) {
Document doc = new Document();
doc.add(new Field("id",field.getId(),Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
doc.add(new Field("title",field.getTitle(),Field.Store.YES,Field.Index.ANALYZED));
for(String content:field.getContent()) {
doc.add(new Field("content",content,Field.Store.NO,Field.Index.ANALYZED));
}
if(field.getAtths()!=null) {
for(String att:field.getAtths()) {
doc.add(new Field("atts",att,Field.Store.YES,Field.Index.NO));
}
}
doc.add(new NumericField("objId",Field.Store.YES,true).setIntValue(field.getObjId()));
doc.add(new NumericField("createDate",Field.Store.YES,true).setLongValue(field.getCreateDate().getTime()));
return doc;
}
@Override
public void addIndex(IndexField fields,boolean inDatabase) {
try {
if(inDatabase) {
TempIndex ti = new TempIndex();
ti.setAdd();
ti.setObjId(fields.getObjId());
ti.setType(fields.getType());
tempIndexDao.add(ti);
}
NRTManager nrtMgr = LuceneContext.getInstance().getNRTManager();
Document doc = field2Doc(fields);
nrtMgr.addDocument(doc);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void deleteIndex(String id,String type) {
try {
TempIndex ti = new TempIndex();
ti.setDelete();
///xx_xx
ti.setId(Integer.parseInt(id));
ti.setType(type);
tempIndexDao.add(ti);
LuceneContext.getInstance().getNRTManager().deleteDocuments(new Term("id",id));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void updateIndex(IndexField fields) {
try {
TempIndex ti = new TempIndex();
ti.setDelete();
///xx_xx
ti.setId(fields.getObjId());
ti.setType(fields.getType());
tempIndexDao.add(ti);
NRTManager nrtMgr = LuceneContext.getInstance().getNRTManager();
Document doc = field2Doc(fields);
nrtMgr.updateDocument(new Term("id",fields.getId()), doc);
} catch (IOException e) {
e.printStackTrace();
}
}
private String highligher(String text,Query query,String field) {
try {
QueryScorer scorer = new QueryScorer(query);
Fragmenter fragmenter = new SimpleSpanFragmenter(scorer);
Formatter formatter = new SimpleHTMLFormatter("<span class='lighter'>","</span>");
Highlighter lighter = new Highlighter(formatter,scorer);
lighter.setTextFragmenter(fragmenter);
String ht = lighter.getBestFragment(LuceneContext.getInstance().getAnalyzer(),
field,text);
if(ht==null) {
if(text.length()>=200) {
text = text.substring(0, 200);
text=text+"....";
}
return text;
}
else return ht.trim();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidTokenOffsetsException e) {
e.printStackTrace();
}
return text;
}
private ScoreDoc getLastDoc(int pageOffset,IndexSearcher searcher,Query query) {
if(pageOffset<=0) return null;
try {
TopDocs tds = searcher.search(query,pageOffset-1);
return tds.scoreDocs[pageOffset-1];
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public PageObject<Index> findByIndex(String condition) {
if(condition==null) condition = "";
IndexSearcher searcher = LuceneContext.getInstance().getSearcher();
PageObject<Index> pages = new PageObject<Index>();
List<Index> datas = new ArrayList<Index>();
try {
int pageSize = SystemContext.getPageSize();
int pageOffset = SystemContext.getPageOffset();
MultiFieldQueryParser parser = new MultiFieldQueryParser(LuceneContext.getInstance().getVersion(),
new String[]{"title","content"}, LuceneContext.getInstance().getAnalyzer());
Query query = parser.parse(condition);
TopDocs tds = searcher.searchAfter(getLastDoc(pageOffset,searcher,query),
query, pageSize);
int totalRecord = tds.totalHits;
List<Integer> msgs = new ArrayList<Integer>();
for(ScoreDoc sd:tds.scoreDocs) {
Document doc = searcher.doc(sd.doc);
Index index = new Index();
index.setCreateDate(new Date(Long.parseLong(doc.get("createDate"))));
String title = doc.get("title");
index.setTitle(highligher(title,query,"title"));
String[] ans = doc.getValues("atts");
StringBuffer content = new StringBuffer();
if(ans!=null) {
for(String fn:ans) {
content.append(IndexUtil.file2String(fn));
}
}
index.setSummary(content.toString());
int msgId = Integer.parseInt(doc.get("id"));
index.setMsgId(msgId);
msgs.add(msgId);
datas.add(index);
}
Map<Integer,String> contents = messageDao.listMessageContent(msgs);
for(int i=0;i<datas.size();i++) {
Index index = datas.get(i);
String content = contents.get(index.getMsgId());
content = content+index.getSummary();
datas.get(i).setSummary(highligher(content,query,"content"));
}
pages.setDatas(datas);
pages.setOffset(pageOffset);
pages.setPageSize(pageSize);
pages.setTotalRecord(totalRecord);
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TikaException e) {
e.printStackTrace();
} finally {
LuceneContext.getInstance().releaseSearcher(searcher);
}
return pages;
}
private void indexMessage(Message msg) {
List<String> contents = new ArrayList<String>();
List<String> ans = new ArrayList<String>();
contents.add(msg.getContent());
List<Attachment> atts = attachmentDao.listByMessage(msg.getId());
for(Attachment att:atts) {
IndexUtil.attach2Index(contents, ans,att);
}
IndexField field = IndexUtil.msg2IndexField(msg);
field.setContent(contents);
field.setAtths(ans);
addIndex(field,false);
}
private void indexMessages(List<Message> messages) {
for(Message msg:messages) {
indexMessage(msg);
}
}
@Override
public void updateReconstructorIndex() {
/**
* 将数据库中的所有对象取出,创建相应的IndexField完成索引的重构
*/
try {
LuceneContext.getInstance().getNRTManager().deleteAll();
List<Message> messages = messageDao.list("from Message");
indexMessages(messages);
LuceneContext.getInstance().commitIndex();
tempIndexDao.delAll();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void updateSetIndex() {
List<TempIndex> tis = tempIndexDao.list("from TempIndex");
for(TempIndex ti:tis) {
if(ti.getType().equals(IndexUtil.MSG_TYPE)) {
Message msg = messageDao.load(ti.getObjId());
indexMessage(msg);
}
}
LuceneContext.getInstance().commitIndex();
tempIndexDao.delAll();
}
@Override
public void updateCommitIndex() {
tempIndexDao.delAll();
LuceneContext.getInstance().commitIndex();
}
}
public class CleanListener implements ServletContextListener {
private Timer indexTimer;
private WebApplicationContext wac = null;
private class IndexCommit extends TimerTask {
@Override
public void run() {
SystemContext.setRealPath(realPath);
System.out.println("索引进行了提交"+new Date());
IIndexService indexService = (IIndexService)wac.getBean("indexService");
indexService.updateCommitIndex();
}
}
@Override
public void contextInitialized(ServletContextEvent sce) {
//可以获取spring中BeanFactory,这个BeanFactory是在系统启动的时候就完成存储了
wac = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
System.out.println("------------------清理的启动程序已经开启(已经获取了"+wac+")---------------------");
realPath = sce.getServletContext().getRealPath("");
timer = new Timer();
timer.scheduleAtFixedRate(new ClearDataTask(),50000, 300000);
indexTimer = new Timer();
indexTimer.scheduleAtFixedRate(new IndexCommit(), 600000, 600000);
}
发表评论
-
二十六、solr的基本使用
2012-12-26 10:26 971public class Message { p ... -
二十五、solr与tomcat的整合
2012-12-25 13:52 10671、solr是全文搜索服务器,专门用户管理索引的。 2 ... -
二十四、通过NRTManager和SearchManager实现近实时搜索
2012-12-21 11:35 1357是否进行实时搜索 实时搜索(近实时搜索) ... -
二十三、高亮显示
2012-12-20 09:24 1022public void lighter01() { ... -
二十二、Tika
2012-12-20 09:24 977Tika是2008年才产生的一个apache的项目,主要用于打 ... -
二十一、Luke
2012-12-20 09:24 828luke是一个查询索引的工具,使用时必须注意:版本要与luce ... -
二十、自定义过滤器
2012-12-20 09:23 888有的应用有些要求,对于某类型的内容即使满足条件了,但是也不 ... -
十七、搜索过滤
2012-12-20 09:23 659public void searcherByFilter(St ... -
十九、自定义QueryParser
2012-12-19 16:28 1231原因: 1、对于某些Quer ... -
十八、自定义评分
2012-12-19 16:18 798public class MyCustomScoreProvi ... -
十六、搜索排序
2012-12-19 12:14 1040public void searcherBySort(Stri ... -
十五、实现简单同义词分词器
2012-12-19 11:41 1269public interface SamewordContex ... -
十四、中文分词器
2012-11-28 13:49 873中文分词器 : Paoding:庖丁解牛分词器。 ... -
十三、自定义Stop分词器
2012-11-28 13:42 771import java.io.Reader; impor ... -
十二、Attribute
2012-11-28 13:20 836Attribute : ... -
十一、分词器的核心类
2012-11-28 13:12 915Analyzer : SimpleAnalyz ... -
十、分页搜索
2012-11-27 17:30 891分页查询有两种实现方式: 1、再查询 ... -
九、Queryparser
2012-11-27 17:24 1020Mike 默认域包含mike Mi ... -
八、其他搜索Query
2012-11-27 10:30 681TermRangeQuery : 字母范围搜索 ... -
七、搜索的简单实现(TermQuery)
2012-11-26 17:12 1016TermQuery只能精确匹配字符串(包括分词后的字符串,不 ...
相关推荐
8. **实战案例**:书中包含多个实际项目案例,帮助读者将理论知识转化为实践,包括构建搜索引擎、日志分析和内容管理系统等。 9. **Lucene最新版本特性**:英文版可能会包含Lucene的最新版本特性,比如新的API、...
在实际项目中,通常会结合数据库来使用Lucene。首先,从数据库读取数据,然后构建Lucene文档并建立索引。当数据库中的数据发生变化时,需要同步更新Lucene索引,确保搜索结果的准确性。此外,还可以通过优化索引策略...
在Lucene中,为了提高搜索的准确性和效率,通常会使用到一些优化技术,如分词器(Analyzer)和停用词表(Stopword List)。Ikanalyzer是专门为中文处理设计的一个分词器,而stopword+dic则涉及到如何定制和使用...
他的研究领域涵盖人工智能的核心技术,这些技术在现代智能系统中扮演着关键角色。 王宇翔博士,毕业于东南大学计算机科学与工程学院,专长在于大数据近似查询优化、RDF知识库语义查询和分布式数据处理。他在这些...
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
log凑字数 12345678910
【毕业设计】java+springboot+vue电影评论网站系统设计与实现(完整前后端+mysql+说明文档+LunW).zip
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
双向全桥LLC谐振变换器与非对称拓扑的双向模型仿真研究:正向LLC与反向LC的变频控制闭环模型在Matlab Simulink及PLECS环境下的应用,双向全桥LLC谐振变换器:非对称拓扑与双向模型的Matlab Simulink及PLECS仿真研究,双向全桥LLC谐振变器仿真,非对称拓扑,双向模型 正向LLC,反向LC 采用变频控制的闭环模型 运行环境包括matlab simulink,plecs等 ~ ,双向全桥LLC谐振变换器仿真; 非对称拓扑; 双向模型; 变频控制; Matlab Simulink; PLECS。,双向全桥LLC谐振变换器仿真研究:非对称拓扑与变频控制模型
Jordan标准型行列互逆方法-程序求解
目前,在复杂任务(如Spider数据集上的文本到SQL转换)中,使用大型语言模型(LLMs)的微调模型和提示方法之间存在显著差距。为了提高LLMs在推理过程中的性能,我们研究了将任务分解为较小子任务的有效性。特别是,我们展示了将生成问题分解为子问题,并将这些子问题的解决方案输入给LLMs,可以显著提高其性能。我们的实验表明,这种方法使三个LLMs的简单少样本性能提高了大约10%,使其准确性接近或超过最先进水平(SOTA)。在Spider数据集的保留测试集中,以执行准确率为衡量标准,最先进水平是79.9,而使用我们方法的新最先进水平为85.3。我们的方法在上下文中学习,比许多经过深度微调的模型高出至少5%。此外,在BIRD基准测试中,我们的方法实现了55.9%的执行准确率,创下了该基准测试保留测试集的新最先进水平
程序可以参考,非常好的思路建设,完美!
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
# 基于FreeRTOS的ARM926EJS实验系统 ## 项目简介 本项目将FreeRTOS移植到基于ARM926EJ S CPU的ARM Versatile Platform Baseboard上,当前版本基于FreeRTOS 10.4.0,后续会随FreeRTOS新版本发布而更新。项目处于早期开发阶段,包含基础的演示任务,可用于学习和研究实时操作系统的基本功能与应用。 ## 项目的主要特性和功能 1. FreeRTOS内核移植实现FreeRTOS内核在ARM926EJ S架构上的移植,支持任务管理、信号量、队列、事件标志、互斥量等功能。 2. 中断处理具备中断服务例行程序,能处理中断事件并切换任务。 3. 任务切换有任务切换机制,支持手动切换和定时器中断切换。 4. 定时器管理可进行定时器的创建、启动、停止、查询等操作。 5. 内存管理实现动态内存分配与释放,支持运行时动态操作。
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
海神之光上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
基于MATLAB Simulink R2015b的三电平中性点钳位(NPC)逆变器高级仿真模型,基于MATLAB Simulink R2015b的三电平中性点钳位(NPC)逆变器高级仿真模型,Three_Level_NPC_Inverter:基于MATLAB Simulink的三电平中性点钳位(NPC)逆变器仿真模型。 仿真条件:MATLAB Simulink R2015b,拿后前如需转成低版本格式请提前告知,谢谢。 ,核心关键词:Three_Level_NPC_Inverter; MATLAB Simulink; 仿真模型; R2015b版本。,基于MATLAB Simulink的三电平NPC逆变器仿真模型(R2015b版)
CSDN Matlab武动乾坤上传的资料均是完整代码运行出的仿真结果图,可见完整代码亲测可用,适合小白; 1、完整的代码内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作