lucene+heritrix day3(2)
/**
* 第三方提供的搜索,正则匹配搜索
*
* @param path
* @throws IOException
*/
public static void regexQuery(String path) throws IOException {
IndexWriter writer = new IndexWriter(path, new StandardAnalyzer(),
false);
writer.setUseCompoundFile(false);
Document doc1 = new Document();
Document doc2 = new Document();
Document doc3 = new Document();
Field f1 = new Field("url",
"http://www.abc.com/product?typeid=1&category=10&item=34",
Field.Store.YES, Field.Index.TOKENIZED);
Field f2 = new Field("url",
"http://www.def.com/product/show?typeid=3&catagory=10&item=23",
Field.Store.YES, Field.Index.TOKENIZED);
Field f3 = new Field(
"url",
"http://www.ghi.com/product/list?catagory=4&typeid=19&order=32",
Field.Store.YES, Field.Index.TOKENIZED);
doc1.add(f1);
doc2.add(f2);
doc3.add(f3);
// writer.addDocument(doc1);
// writer.addDocument(doc2);
// writer.addDocument(doc3);
writer.close();
IndexSearcher searcher = new IndexSearcher(path);
// 创建一个正则表达式,用于匹配域名为abc.com的地址
String regex = "http://[a-z]{1,3}\\.abc\\.com/.*";
// 构建一个词条Term
Term t = new Term("url", regex);
// 创建正则查询
RegexQuery query = new RegexQuery(t);
Query q = new TermQuery(new Term("url", "http"));
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
}
searcher.close();
}
/**
* 跨度搜索
*
* @param path
* @throws IOException
* SpanQuery的跨度是指:数据源中每个词条的位置构成的一个跨度,在某个跨度范围内, 查找关键字并匹配文档,这就是
* SpanQuery所做的事 SpanQuery是一个抽象类,实际搜索功能是由它的多个子类来完成的
*/
public static void spanQuery(String path) throws IOException {
IndexWriter writer = new IndexWriter(path, new StandardAnalyzer(),
false);
Document doc1 = new Document();
// 设置内容用空格分开
Field f1 = new Field("content", "aa bb cc dd ee ff gg hh ii jj kk",
Field.Store.YES, Field.Index.TOKENIZED);
doc1.add(f1);
writer.addDocument(doc1);
writer.close();
IndexSearcher searcher = new IndexSearcher(path);
// 创建四个词条
Term t1 = new Term("content", "aa");
Term t2 = new Term("content", "cc");
Term t3 = new Term("content", "gg");
Term t4 = new Term("content", "kk");
// 创建四个SpanTermQuery
// SpanTermQuery的功能与TermQuery一样,只不过是把文档中数据源中的词语位置都标记下来了
SpanTermQuery s1 = new SpanTermQuery(t1);
SpanTermQuery s2 = new SpanTermQuery(t2);
SpanTermQuery s3 = new SpanTermQuery(t3);
SpanTermQuery s4 = new SpanTermQuery(t4);
// 先创建两个SpanNearQuery,参数为上面的四个SpanTermQuery
// SpanNearQuery的功能与PhraseQuery的功能类似,只不过PharseQuery查询的是具有一定无关
// 单词长度的查询,而SpanNearQuery所匹配不一定是短语,它还有可能把SpanQuery的查询结果作为查询
// 对象。下面的构造函数:第二个参数相当于坡度slop,规定查询数据源的第一个必须出现查询的对象,
// 第三个参数false,表示要查询的多个词组是否要按照顺序出现在数据源中
SpanNearQuery query1 = new SpanNearQuery(new SpanQuery[] { s1, s2 }, 1,
false);
SpanNearQuery query2 = new SpanNearQuery(new SpanQuery[] { s3, s4 }, 3,
false);
// 在创建一个SpanNearQuery,参数为上面两个SpanNearQuery
// 意义就是在以上两个SpanNearQuery的搜索的结果中,进行搜索
SpanNearQuery query3 = new SpanNearQuery(new SpanNearQuery[] { query1,
query2 }, 3, false);
// SpanOrQuery是合并SpanQuery[]的搜索结果
SpanOrQuery query4 = new SpanOrQuery(new SpanQuery[] { query1, query2 });
// SpanNotQuery意思是从第一个SpanQuery的查询结果中去掉第二个SpanQuery的查询结果
SpanNotQuery query5 = new SpanNotQuery(query1, query2);
Hits hits = searcher.search(query3);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
}
searcher.close();
}
/**
* 通配符搜索
*
* @param path
* @throws IOException
*/
public static void wildcardQuery(String path) throws IOException {
IndexSearcher searcher = new IndexSearcher(path);
// 构建一个带有通配符的词条
Term t = new Term("content", "?o*");
WildcardQuery query = new WildcardQuery(t);
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
}
searcher.close();
}
/**
* 模糊搜索
*
* @param path
* @throws IOException
*/
public static void fuzzyQuery(String path) throws IOException {
IndexWriter writer = new IndexWriter(path, new StandardAnalyzer(),
false);
writer.setUseCompoundFile(false);
Document doc1 = new Document();
Document doc2 = new Document();
Document doc3 = new Document();
Document doc4 = new Document();
Document doc5 = new Document();
Document doc6 = new Document();
Field f1 = new Field("content", "word", Field.Store.YES,
Field.Index.TOKENIZED);
Field f2 = new Field("content", "work", Field.Store.YES,
Field.Index.TOKENIZED);
Field f3 = new Field("content", "seed", Field.Store.YES,
Field.Index.TOKENIZED);
Field f4 = new Field("content", "sword", Field.Store.YES,
Field.Index.TOKENIZED);
Field f5 = new Field("content", "world", Field.Store.YES,
Field.Index.TOKENIZED);
Field f6 = new Field("content", "ford", Field.Store.YES,
Field.Index.TOKENIZED);
doc1.add(f1);
doc2.add(f2);
doc3.add(f3);
doc4.add(f4);
doc5.add(f5);
doc6.add(f6);
writer.addDocument(doc1);
writer.addDocument(doc2);
writer.addDocument(doc3);
writer.addDocument(doc4);
writer.addDocument(doc5);
writer.addDocument(doc6);
writer.close();
IndexSearcher searcher = new IndexSearcher(path);
// 构建一个Term,然后对其进行模糊查找
Term t = new Term("content", "work");
FuzzyQuery query = new FuzzyQuery(t);
// FuzzyQuery还有两个构造函数,来限制模糊匹配的程度
// 在FuzzyQuery中,默认的匹配度是0.5,当这个值越小时,通过模糊查找出的文档的匹配程度就
// 越低,查出的文档量就越多,反之亦然
FuzzyQuery query1 = new FuzzyQuery(t, 0.1f);
FuzzyQuery query2 = new FuzzyQuery(t, 0.1f, 1);
Hits hits = searcher.search(query2);
for (int i = 0; i < hits.length(); i++) {
System.out.println(hits.doc(i));
}
searcher.close();
}
相关推荐
VDA 19.1_3rd edition_2026_English.rar
VDA 19.1_3rd edition_2026_English.rar
正交拉丁超立方(OLHC)分组与实验设计(DOE)评估的优化Python实现,移植自MATLA.rar
正交拉丁超立方(OLHC)分组与实验设计(DOE)评估的优化Python实现,移植自MATLA.rar
FCEMS燃料电池汽车能量管理控制、动力系统+驾驶员模型仿真、附说明文档及参考文献
内容概要:本文围绕燃料电池汽车能量管理控制系统(FCEMS)展开,系统阐述了其动力系统与驾驶员模型的仿真方法,并配套提供了详尽的说明文档及参考文献。研究深度融合线性车辆三自由度动力学模型与无迹卡尔曼滤波(UKF)技术,实现了对车辆横摆角速度、质心侧偏角及车速等关键状态的高精度估计,为优化能量管理策略奠定了坚实基础。整个仿真系统依托Carsim与Simulink联合仿真平台构建,有效保障了模型的真实性和工程实用性。此外,研究还涵盖了燃料电池供氢系统的精细化建模与先进控制策略,完整呈现了从核心部件建模到整车系统集成的全流程技术方案。; 适合人群:具备一定车辆工程、自动化或电力电子背景的研究生、科研人员及从事新能源汽车研发的工程师。; 使用场景及目标:①开展燃料电池汽车的能量管理控制策略研究与仿真验证;②进行车辆动力学状态估计与联合仿真平台搭建;③学习基于Simulink/Carsim的新能源汽车系统建模方法;④为硕士论文复现或科研项目提供全面的技术支持与参考。; 阅读建议:建议读者结合提供的仿真模型、PPT说明与参考文献,逐步复现仿真流程,重点关注UKF状态估计算法与能量管理逻辑的实现细节,同时利用所提供的网盘资源下载完整资料以便深入学习与扩展应用。
三相维也纳PFC整流器闭环仿真控制策略研究-中点电位平衡、无功补偿与双载波SVPWM(Simulink仿真实现)
内容概要:本文系统研究了三相维也纳PFC整流器的闭环仿真控制策略,聚焦于中点电位平衡、无功补偿以及双载波SVPWM调制三大关键技术问题。基于Simulink平台构建了30kW三相维也纳整流器的完整仿真模型,采用零序电流注入法实现直流侧中点电位的精确控制,有效抑制电压偏移,提升系统稳定性。结合无功电流补偿策略,显著改善输入功率因数,降低谐波畸变率。创新性地引入双载波SVPWM(马鞍波/羊角波)调制技术,优化开关调制过程,改善输出电压波形质量,减少开关损耗,提高整体转换效率。控制系统实现了对输入电流与输出电压的双闭环精确调控,仿真结果验证了该策略在动态响应速度、稳态控制精度及抗负载扰动能力方面的优越性能。; 适合人群:从事电力电子变换器设计、新能源发电系统、电动汽车充电技术及相关领域的高校研究生、科研人员以及具备电力电子与自动控制理论基础的工程技术人员。; 使用场景及目标:①为高功率密度、高效率PFC整流器的研发提供理论依据与仿真验证手段;②解决三电平整流器中常见的中点电位失衡难题;③探索先进SVPWM调制技术在实际系统中的应用潜力;④支撑新能源并网、工业电源、车载充电机等对电能质量要求严苛的应用场景下的核心电力电子装置开发。; 阅读建议:建议读者结合提供的Simulink仿真模型进行实践操作,深入理解控制器结构设计、零序注入实现方式、双载波生成逻辑及PI参数整定方法,并可通过修改负载条件或电网参数开展对比仿真,以全面掌握系统动态特性,后续可进一步推进至硬件原型实验验证。
汽车电动助力转向EPS系统建模仿真、二自由度+上下转向柱等、附参考文献
内容概要:本文围绕汽车电动助力转向(EPS)系统展开,重点介绍基于线性化模型的EPS系统建模仿真方法,涵盖二自由度车辆动力学模型与上下转向柱的动力学建模,深入探讨转向系统的控制策略设计与仿真验证。通过Matlab/Simulink工具实现系统建模与仿真分析,并结合Carsim与Matlab联合仿真手段,提升模型的真实性和工程参考价值。同时,研究中引入参考文献支撑,确保理论依据充分,内容兼具学术性与实用性。 适合人群:具备车辆工程或自动化相关背景,熟悉Matlab/Simulink仿真环境,从事汽车底盘控制、转向系统开发或智能驾驶研究的研发人员与研究生。 使用场景及目标:①开展电动助力转向系统(EPS)的建模与控制算法设计;②利用联合仿真平台(如Carsim与Matlab)进行车辆操纵稳定性分析;③研究转向柱动力学特性对转向手感的影响;④作为车辆动力学课程或科研项目的仿真案例参考。 阅读建议:建议读者结合文中提及的参考文献,系统学习EPS控制理论基础,并动手实践Matlab/Simulink仿真模型,通过调整控制参数与工况设置,深入理解系统响应特性,进一步拓展至多自由度整车模型与先进控制策略(如H∞、MPC)的应用研究。


Java SE
