我现在要实现这样的功能:
我在e:\\file 文件夹下有很多个xml文件,其内容形式是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<aka>bin laden</aka>
<firstName>bin</firstName>
<address>test</address>
<nationality>test</nationality>
<res>test</res>
</root>大家知道,用luncene开放搜索引擎,无非是建立索引和搜索这两部分。
因此,我首先要给这些xml文件建立索引。
现在有个要求:我在搜索的时候,我只搜索标签<aka>,<firstName>,<address>等这些标签中的内容,针对这个xml文件内容,其实,我只想搜索 bin ,bin laden,test这些内容,而不是标签本身。请问该怎么建立索引哦?
请给我代码哦,谢谢
我在e:\\file 文件夹下有很多个xml文件,其内容形式是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<aka>bin laden</aka>
<firstName>bin</firstName>
<address>test</address>
<nationality>test</nationality>
<res>test</res>
</root>大家知道,用luncene开放搜索引擎,无非是建立索引和搜索这两部分。
因此,我首先要给这些xml文件建立索引。
现在有个要求:我在搜索的时候,我只搜索标签<aka>,<firstName>,<address>等这些标签中的内容,针对这个xml文件内容,其实,我只想搜索 bin ,bin laden,test这些内容,而不是标签本身。请问该怎么建立索引哦?
请给我代码哦,谢谢
解决方案 »
- 消息队列知识求教!
- 请教个基础问题
- static的数据库连接对于单进程程序有没有影响?
- 关于 string lenth SQL 代码单元 的问题
- 请教一下:network profile server是个什么功能的server。了解的请赐教
- 如何用java实现寻找应用软件的安装路径
- 下载了 MS SQL Server 2000 Driver for JDBC 请问该如何配置JBuilder6
- 在程序主体面板中如何设置多个工具栏?
- 血本求助,快来呀,愁死我了,如果再解决不了的话,我就死定了。
- A class defined within a method can only access final fields of the enclosing method.怎么理解啊?请举个简单的例子.
- JScrollPane如何设置鼠标滚动一下的滚动量?
- 2 个List里面内容比较,有没有先后顺序。
<aka>,<firstName>,<address>分别为一个field
bin ,bin laden,test这些内容为一个field,比如叫desc;对内容进行切词分词
<?xml version="1.0" encoding="UTF-8"?>
<root>
<aka>bin laden</aka>
<firstName>bin</firstName>
<address>test</address>
<nationality>test</nationality>
<res>test</res>
</root>按照你的做法,其代码应该是:
IndexWriter writer = new IndexWriter(INDEX_STORE_PATH,new MMAnalyzer(), true);
Document doc = new Document();// 为文件名创建一个Field
Field field = new Field("<aka>", "bin laden",Field.Store.YES,Field.Index.TOKENIZED);
doc.add(field);// 把Document加入IndexWriter
writer.addDocument(doc);
但这样貌似和xml文件本身脱离了呀,它能找到e:\\file 下的这些文件内容吗?
我不是很懂,请求明示,谢谢
而且每个xml文件都可以用path来定位
其实这些xml文件是这样生成的,我在页面上导入一个文件,然后把内容解析成这些xml文件,然后再放到
e:\\file 下面,这个时候,再给它建立索引
楼上的,你能帮忙把我这代码改改吗?我没明白你说的
“要加一个ref的field的吗;ref=path:”
IndexWriter writer = new IndexWriter(INDEX_STORE_PATH,new MMAnalyzer(), true);
Document doc = new Document();// 为文件名创建一个Field
Field field = new Field("<aka>", "bin laden",Field.Store.YES,Field.Index.TOKENIZED);
doc.add(field);// 把Document加入IndexWriter
writer.addDocument(doc);
IndexWriter writer = new IndexWriter(INDEX_STORE_PATH,new MMAnalyzer(), true);
Document doc = new Document();// 为文件名创建一个Field
Field field = new Field("ref", "path变量",Field.Store.YES,Field.Index.UNTOKENIZED);
//就是加上面一行;后面都一样。参考一下;我是这么搞的
Field field = new Field("aka", "bin laden",Field.Store.YES,Field.Index.TOKENIZED);
doc.add(field);// 把Document加入IndexWriter
writer.addDocument(doc);
Document doc = new Document();// 为文件名创建一个Field
Field field = new Field("ref", "path变量",Field.Store.YES,Field.Index.UNTOKENIZED);
//就是加上面一行;后面都一样。参考一下;我是这么搞的
Field field = new Field("aka", "bin laden",Field.Store.YES,Field.Index.TOKENIZED);
doc.add(field);// 把Document加入IndexWriter
writer.addDocument(doc);你这段代码 有2个field变量哦,
doc.add(field);// 把Document加入IndexWriter到底是加的那一个的呀?
Document doc = new Document();// 为文件名创建一个Field
Field ref= new Field("ref", "path变量",Field.Store.YES,Field.Index.UNTOKENIZED);
//就是加上面一行;后面都一样。参考一下;我是这么搞的
Field field = new Field("aka", "bin laden",Field.Store.YES,Field.Index.TOKENIZED);
doc.add(field);// 把Document加入IndexWriter
doc.add(ref);//
writer.addDocument(doc);
Document doc = new Document();// 为文件名创建一个Field
Field ref= new Field("ref", "path变量",Field.Store.YES,Field.Index.UNTOKENIZED);
//就是加上面一行;后面都一样。参考一下;我是这么搞的
Field field = new Field("aka", "bin laden",Field.Store.YES,Field.Index.TOKENIZED);
doc.add(field);// 把Document加入IndexWriter
doc.add(ref);//
writer.addDocument(doc);
你的代码我有些小小的疑问:
比方说,有个xml文件是e:\\file\20100324.xml
其内容就是若干个
<?xml version="1.0" encoding="UTF-8"?>
<root>
<aka>bin laden</aka>
<firstName>bin</firstName>
<address>test</address>
<nationality>test</nationality>
<res>test</res>
</root>
我在页面上输入bin laden 来搜索,我实际上是要搜索 e:\\file\20100324.xml
这个文件中bin laden内容
但你给我的代码是怎么自动找到这个文件的哦?我对这一块有些困惑,请求帮助
2、取得搜索结果的引用集Hits
3、
Document doc = hits.doc(i);
String ref = doc.get("ref");获得ref简单步骤就是这样,中间需要自己充实
1. xml文件存在在FS中,lucene中索引;
这时候,需要加一field用来保存,xml文件中fs中的实际存储位置;
Field ref= new Field("filePath", "{your file path, c:\a.xml}",Field.Store.YES,Field.Index.UNTOKENIZED);
Field field = new Field("content", "{只提取xml文件中的文本内容}",Field.Store.NO,Field.Index.TOKENIZED); 检索时,检索content内容即可,根据filePath从fs中加载实际xml文件;2. xml文件保存在lucene中;
Field field = new Field("content", "{只提取xml文件中的文本内容}",Field.Store.NO,Field.Index.TOKENIZED);
Field field = new Field("xml", "{xml文件内容}",Field.Store.YES,Field.Index.NO);
检索时,检索content内容即可,从xml中直接读取xml内容;