lucene+heritrix day2

shibenjie 2008-04-03 03:51:48
package ear.lucenedemo.process;

import java.io.IOException;

import org.apache.lucene.index.Term;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;

public class IndexSearcherTest {

private static String INDEX_STORE_PATH="d:\\lucene\\IndexReader";

public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
IndexSearcherTest.search(INDEX_STORE_PATH, "女");
}
public static void search(String path,String keyword) throws IOException{
//初始化一个IndexSearch
IndexSearcher searcher=new IndexSearcher(path);
//创建一个Term对象
Term term=new Term("bookname",keyword);
//构建一个Query对象(表示一次查询),注意:Query是一个抽象类,要new一个Query的实现类
Query query=new TermQuery(term);

//开始检索,检索的结果存放在Hits对象里面(Hits表示一次查询的结果)
//IndexSearcher的search方法是整个检索系统的核心,他将一个query对象送入后台,并检索出结果
Hits hits=searcher.search(query);
//显示查询结果
System.out.println("有"+hits.length()+"文档匹配,如下:");
for(int i=0;i<hits.length();i++){
System.out.println("========================");
//取得当前结果集中第i个Document
System.out.println(hits.doc(i));
//取得当前结果集中第i个Document的得分,也就是匹配率的高低
System.out.println("匹配度率为:"+hits.score(i));
//取得当前结果集中第i个Document的索引内部ID值
System.out.println("匹配文档的ID为:"+hits.id(i));
System.out.println("========================");
}

}

}



package ear.lucenedemo.process;

import java.io.IOException;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexModifier;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.index.TermDocs;

public class IndexReaderTest {

private static String INDEX_STORE_PATH="d:\\lucene\\IndexReader";

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// IndexReaderTest.createIndex(INDEX_STORE_PATH);
// IndexReaderTest.indexReaderTest(INDEX_STORE_PATH);
// IndexReaderTest.deleteIndex(INDEX_STORE_PATH);
// IndexReaderTest.useFieldDeleteDoc(INDEX_STORE_PATH);
IndexReaderTest.useIndexModifierDelDoc(INDEX_STORE_PATH);
}
/**
* 创建索引
* @param path 索引的路径
* @throws IOException
*/
public static void createIndex(String path) throws IOException{
IndexWriter writer=new IndexWriter(INDEX_STORE_PATH,
new StandardAnalyzer(),true);
writer.setUseCompoundFile(false);

Document doc1=new Document();
Document doc2=new Document();
Document doc3=new Document();
Field f1=new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,
Field.Index.TOKENIZED);
Field f2=new Field("bookname","英雄儿女",Field.Store.YES,
Field.Index.TOKENIZED);
Field f3=new Field("bookname","篱笆女人和狗",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();
}
/**
*
* @param path 索引路径
* @throws IOException
*/
public static void indexReaderTest(String path) throws IOException{
//使用IndexReader来读取索引
IndexReader reader=IndexReader.open(path);

//显示索引内的所有Document
System.out.println("索引文档列表:");
for(int i=0;i<reader.numDocs();i++){
System.out.println(reader.document(i));
}
//输出当前的索引版本
System.out.println("版本:"+reader.getVersion());
//输出当前的文档数量
System.out.println("索引内文档数量是:"+reader.numDocs());

//构造一个词条并在索引中查找
System.out.println("\n查找词条“女”");
Term term1=new Term("bookname","女");
TermDocs docs=reader.termDocs(term1);
while(docs.next()){
System.out.println("---------------------------------------");
System.out.println("含有所查找的<"+term1+">的Document的编号为:"+docs.doc());
System.out.println("在文档中出现的次数为:"+docs.freq());
System.out.println("---------------------------------------");

}
//不要忘记关闭IndexReader
reader.close();

//再次向文档中添加一个文档
IndexWriter writer2=new IndexWriter(path,new StandardAnalyzer(),
false);
writer2.setUseCompoundFile(false);
Document doc4=new Document();
Field f4=new Field("bookname","钢铁战士",Field.Store.YES,
Field.Index.TOKENIZED);

doc4.add(f4);
f4=new Field("bookname","钢男士怎样炼成的",Field.Store.YES,Field.Index.TOKENIZED);
doc4.add(f4);
writer2.addDocument(doc4);
writer2.close();

System.out.println("==================================================");

//使用IndexReader来读取索引
IndexReader reader2=IndexReader.open(INDEX_STORE_PATH);

//显示索引中的所有文档
System.out.println("索引文档列表:");
for(int i=0;i<reader2.numDocs();i++){
System.out.println(reader2.document(i));
}

//输出当前索引的版本信息
System.out.println("版本:"+reader2.getVersion());
//输出当前索引的文档数量
System.out.println("索引内的文档数量的是"+reader2.numDocs());

System.out.println("\n查找词条“女”");
Term term2=new Term("bookname","女");
docs=reader2.termDocs(term2);
while(docs.next()){
System.out.println("---------------------------------------");
System.out.println("含有所查找的<"+term2+">的Document的编号为:"+docs.doc());
System.out.println("在文档中出现的次数为:"+docs.freq());
System.out.println("---------------------------------------");

}

System.out.println("\n查找词条“钢”");
Term term3=new Term("bookname","钢");
docs=reader2.termDocs(term3);
while(docs.next()){
System.out.println("---------------------------------------");
System.out.println("含有所查找的<"+term3+">的Document的编号为:"+docs.doc());
System.out.println("在文档中出现的次数为:"+docs.freq());
System.out.println("---------------------------------------");

}

}

public static void deleteIndex(String path) throws IOException{
IndexReader reader=IndexReader.open(path);
reader.deleteDocument(0);
//要对 IndexReader进行关闭,这样才实现了类似回收站的删除,
//删除后的文件被放入deletable文件中,因为是回收站似的删除,所以还可以回复哦
reader.close();

//要使用一个新的IndexReader打开索引,如果还是用原来的IndexReader的话,那么就会出现异常
IndexReader reader2=IndexReader.open(path);
System.out.println(reader2.numDocs());
reader2.undeleteAll();
System.out.println("索引文档列表:");
for(int i=0;i<reader2.numDocs();i++){
System.out.println(reader2.document(i));
}
reader2.close();
}

public static void useFieldDeleteDoc(String path) throws Exception{
IndexReader reader=IndexReader.open(path);
Term term=new Term("bookname","女");
//用term进行批量文档的删除,Term类是用于表示词条的一个工具
//IndexReader的deleteDocument()方法是一个能够批量删除索引的方法
reader.deleteDocuments(term);
reader.close();

IndexReader reader2=IndexReader.open(path);
//reader2.undeleteAll();
System.out.println(reader2.numDocs());
reader2.close();

}
public static void useIndexModifierDelDoc(String path) throws IOException{
//注意:IndexModifier这个类是lucene2.0新增加的一个类
//IndexWriter这个类功能都在该类中了,该类只不过有增加了对文档进行删除的功能
//这样IndexModifier既有修改索引的功能,又有了删除索引的功能
IndexModifier modifier=new IndexModifier(path,new StandardAnalyzer(),false);
System.out.println("删除前的文档数目:"+modifier.docCount());
modifier.deleteDocument(0);
System.out.println("删除后文档的数目:"+modifier.docCount());
modifier.close();

//用IndexReader进行索引的恢复
IndexReader reader=IndexReader.open(path);
reader.undeleteAll();
reader.close();
System.out.println("恢复删除后文档的数目:"+reader.numDocs());
}

}












...全文
95 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
huhaozhong 2008-07-07
  • 打赏
  • 举报
回复

雕虫小技
caoxu1987728 2008-04-21
  • 打赏
  • 举报
回复
大虾,太牛了了
内容概要:本文围绕“基于雅可比伪逆迭代的双臂协同轨迹规划与跟踪误差收敛性研究”展开,系统探讨了利用雅可比矩阵伪逆法实现双机械臂协同运动的轨迹规划方法,并通过Matlab代码实现了对系统跟踪误差收敛性的仿真验证。研究内容涵盖双臂协同的动力学建模、雅可比伪逆算法的迭代求解机制、轨迹跟踪控制器的设计,以及跟踪误差收敛性的数学证明与数值仿真分析,旨在提升多机械臂系统在复杂协作任务中的运动协调性、轨迹跟踪精度与控制稳定性。; 适合人群:具备机器人学、自动控制理论及数值计算基础,熟悉Matlab/Simulink仿真环境,从事多机械臂协同控制、轨迹规划算法开发及相关方向的研究生、科研人员或工程技术人员。; 使用场景及目标:①研究双机械臂系统在协同作业中的运动规划与控制策略;②掌握雅可比伪逆法在冗余自由度机器人运动学求解中的应用原理;③实现并验证轨迹规划算法的仿真性能与误差收敛特性;④为工业装配、协作搬运、精密操作等多臂机器人应用场景提供算法支持与技术参考。; 阅读建议:建议读者结合Matlab代码逐模块分析算法实现细节,重点关注雅可比矩阵的构建方法、伪逆求解过程及其在迭代控制中的应用机制,同时通过仿真结果对比分析不同参数对系统收敛性与跟踪精度的影响,宜在实际调试中调整增益参数与初始条件以深化对控制性能的理解。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧