- 浏览: 1042175 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
package lucene3;
import java.io.File;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
public class DBQuery {
/**
* @param args
*/
public static void main(String[] args) {
try {
Directory dir = FSDirectory.open(new File("d://lucene3"));
IndexSearcher searcher = new IndexSearcher(dir, true);
Query q = new TermQuery(new Term("ID", "2"));
TopDocs hits = searcher.search(q, 10);
ScoreDoc[] docs = hits.scoreDocs;
for(int i=0;i<docs.length;i++)
{
Document doc = searcher.doc(docs[i].doc);
System.out.println("ID:"+doc.get("ID")+",Name:"+doc.get("Name"));
}
searcher.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
注释:
使用索引进行查询的主要步骤:
1、打开已有的索引,创建IndexSearcher对象
2、指定查询用到的Field和查询字符串,创建TermQuery
3、使用IndexSearcher进行查询,查询结果以TopDocs对象返回。在这里search方法的第二个参数指定返回前N个记录。
主要对象说明:
1、Term
Term是查询使用的基本单位,对应与在索引中使用的Field类。可以将其理解为一个map,其中key为索引中Field name,value为查询字符串。
当查询字符串为一个单词的情况下,不会有任何问题;但是当需要查询查询字符串为多个单词或是一句话的时候就会查不出来。这个主要原因是,在建立索引时我们对Field中的内容进行了分词,但在查询时,对查询字符串没有做分词,整个做为一个单词处理,当然查不到了。
要解决这个问题,针对上面的例子,只需要去掉new TermQuery这句,换成下面的代码:
public static void main(String[] args) {
try {
Directory dir = FSDirectory.open(new File("d://lucene3"));
IndexSearcher searcher = new IndexSearcher(dir, true);
//Query q = new TermQuery(new Term("ID", "2"));
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT);
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "ID", analyzer);
Query q = parser.parse("2");
TopDocs hits = searcher.search(q, 10);
ScoreDoc[] docs = hits.scoreDocs;
for(int i=0;i<docs.length;i++)
{
Document doc = searcher.doc(docs[i].doc);
System.out.println("ID:"+doc.get("ID")+",Name:"+doc.get("Name"));
}
searcher.close();
} catch (Exception e) {
e.printStackTrace();
}
}
这里需要保证使用的analyzer与建立索引时用的一样即可。new QueryParser的第二个参数就是查询的FIELD。
然后通过Query q = parser.parse("2");来解析要查询的内容。
我们用query.toString()可以看到转化后的Term内容。
- 当查询字符串="2"时,query.toString()=ID:2(前面为field name,后面为查询内容)
- 当查询字符串="java and system"时,query.toString()=contents:java contents:system。可见已经被做了分词,同时去掉了连接字and
2、TopDocs
此类封装了返回的符合条件的记录,其中:
- totalHits为符合条件的记录总数;
- scoreDocs为符合条件记录的数组,不过里面只记录了Document的ID。Document的实际内容,需通过IndexSearcher取docID对应的Document才能得到。
需要注意-若设置在search方法中设置了返回记录数为N,则scoreDocs最多只会包含前N个文档;但是totalHits会返回匹配的总数量(类似google中显示的匹配的总页面数量)。scoreDocs.length可能不等于totalHits,做scoreDocs遍历时,直接用totalHits做为数组大小用的,容易引起bug!
发表评论
-
使用Lucene-Spatial实现集成地理位置的全文检索
2015-05-27 17:33 1266Lucene通过Spatial包提供了对基于地理位置的 ... -
Lucene4.10.2开发之高亮显示
2015-05-05 23:13 564转载请注明,原创地址,谢谢配合! http://qindo ... -
bobo-browse
2011-02-10 10:22 2225bobo-browse 是一款用java写的lucene扩展组 ... -
Lucene 2 通过updateDocument更新索引
2010-12-30 15:47 2032package com.lucene; i ... -
Lucene 3建立索引和查询索引详解
2010-12-22 23:02 1817public void index() throws Corr ... -
Lucene3 建立索引
2010-12-22 22:25 1375Lucene3在建立索引的API上有比较大的变化。直接上程序: ... -
Lucene 3.0的简单解析及变化
2010-12-22 21:59 1116一、 概述 Lucene3 ... -
Lucene分词器之庖丁解牛
2010-12-22 07:47 3454注意:这里配置环境变量要重新启动系统后生效 我现在测试 ... -
Lucene从结果中取出数据
2010-12-21 20:23 1201有些应用,比如我们首先要搜索一个Person的索引文件,然后通 ... -
Lucene过滤器
2010-12-21 20:05 3774有的应用有些要求,对于某类型的内容即使满足条件了,但是也不能被 ... -
Lucene对于短语匹配查询的用法
2010-12-21 17:41 1345通常对于ID查询或者是比较确定字段内容的查询,我们就用: T ... -
Lucene 对所查的结果进行排序
2010-12-20 23:01 1197前面介绍完查询以后,现在要对查询结果进行排序的显示。 代码: ... -
Lucene 搜索方法(模糊搜索)
2010-12-20 11:54 3452LUCENE提供了一种模糊搜 ... -
Lucene 搜索方法(多短语搜索)
2010-12-20 11:42 1157短语搜索解决了短语搜索的问题,在很多情况下,用户输入某个关键字 ... -
Lucene 搜索方法(短语搜索)
2010-12-20 11:15 1794用户在搜索的时候,更多的情况是输入一个以上的关键字,这些关键字 ... -
Lucene 搜索方法(前缀搜索)
2010-12-20 10:27 1859PrefixQuery是一种前缀搜索,在检索的时候,常常需要进 ... -
Lucene 的索引读取工具(IndexReader)
2010-12-19 23:00 1587Lucene有一个很重要的工具IndexReader负责对索引 ... -
Lucene 搜索方法(范围搜索)
2010-12-19 22:54 1271在某些情况下,用户需要查找一定范围内的文档,比如时间,ID等。 ... -
Lucene 搜索方法(布尔搜索)
2010-12-19 22:04 1596布尔搜索: 布尔查询的对象中,包含一个子句的集合。各种子句间都 ... -
Lucene 搜索方法(词条搜索)
2010-12-19 21:15 1241词条搜索是LUCENE最为简单的一种搜索方式,通过对某个固定的 ...
相关推荐
Lucene之删除索引 Lucene之删除索引 Lucene之删除索引 http://blog.csdn.net/nupt123456789/article/details/10666105
为了快速查询,加快查询速度,减少与数据库交互,经常需要用到lucene实现创建索引和查询
Lucene创建索引,查询索引的简单使用。
lucene 做索引查询流程,来自《lucene in action》
基于lucene技术的增量索引,实现索引的首次创建,动态增删改
Lucene3.0创建索引 读取目录下的所有txt文档格式的文件,然后生成一个索引文件到某目录下!
Lucene实现索引和查询的实例讲解Lucene实现索引和查询的实例讲解
在Eclipse环境中运用java,Lucene建索引及查询关键字
Lucene 删除 合并索引,可以指定几个索引文件合并成一个索引文件。自己写的,有很多不足之处请多指教
Lucene索引器实例Lucene索引器实例Lucene索引器实例Lucene索引器实例
lucene 对 xml建立索引 建立索引就是怎么简单 呵呵
lucene3针对数据库索引操作,示例源码+解读。
lucene建立数据库索引的问题,在这里,把其中的一些问题补充说明,希望对大家有新的帮助,希望大家相互提出问题,相互学习,共同进步!!
该程序代码属于本人2015所写,虽然尚有不足,却实现了对多个文件夹下的数据进行Lucene建立索引和查询功能,并包含了所需的所有jar包,工程直接导入即可运行。
深入 Lucene 索引机制深入 Lucene 索引机制深入 Lucene 索引机制深入 Lucene 索引机制深入 Lucene 索引机制深入 Lucene 索引机制
1) 提供实时索引的创建、管理 2) Query的创建 详细介绍参照博客:http://blog.csdn.net/xiaojimanman/article/details/20624739 中的介绍
Lucene创建索引步骤: 1、创建Directory(索引位置) 2、创建IndexWrite(写入索引) 3、创建Document对象 4、为Document添加Field(相当于添加属性:类似于表与字段的关系) 5、通过IndexWriter添加文档到索引中
luke8用于查看lucene保存的索引库数据和文档数据
lucene索引结构原理