- 浏览: 1068347 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (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 1345Lucene通过Spatial包提供了对基于地理位置的 ... -
Lucene4.10.2开发之高亮显示
2015-05-05 23:13 603转载请注明,原创地址,谢谢配合! http://qindo ... -
bobo-browse
2011-02-10 10:22 2812bobo-browse 是一款用java写的lucene扩展组 ... -
Lucene 2 通过updateDocument更新索引
2010-12-30 15:47 2067package com.lucene; i ... -
Lucene 3建立索引和查询索引详解
2010-12-22 23:02 1849public void index() throws Corr ... -
Lucene3 建立索引
2010-12-22 22:25 1410Lucene3在建立索引的API上有比较大的变化。直接上程序: ... -
Lucene 3.0的简单解析及变化
2010-12-22 21:59 1149一、 概述 Lucene3 ... -
Lucene分词器之庖丁解牛
2010-12-22 07:47 3500注意:这里配置环境变量要重新启动系统后生效 我现在测试 ... -
Lucene从结果中取出数据
2010-12-21 20:23 1238有些应用,比如我们首先要搜索一个Person的索引文件,然后通 ... -
Lucene过滤器
2010-12-21 20:05 3801有的应用有些要求,对于某类型的内容即使满足条件了,但是也不能被 ... -
Lucene对于短语匹配查询的用法
2010-12-21 17:41 1386通常对于ID查询或者是比较确定字段内容的查询,我们就用: T ... -
Lucene 对所查的结果进行排序
2010-12-20 23:01 1229前面介绍完查询以后,现在要对查询结果进行排序的显示。 代码: ... -
Lucene 搜索方法(模糊搜索)
2010-12-20 11:54 3523LUCENE提供了一种模糊搜 ... -
Lucene 搜索方法(多短语搜索)
2010-12-20 11:42 1199短语搜索解决了短语搜索的问题,在很多情况下,用户输入某个关键字 ... -
Lucene 搜索方法(短语搜索)
2010-12-20 11:15 1832用户在搜索的时候,更多的情况是输入一个以上的关键字,这些关键字 ... -
Lucene 搜索方法(前缀搜索)
2010-12-20 10:27 1892PrefixQuery是一种前缀搜索,在检索的时候,常常需要进 ... -
Lucene 的索引读取工具(IndexReader)
2010-12-19 23:00 1618Lucene有一个很重要的工具IndexReader负责对索引 ... -
Lucene 搜索方法(范围搜索)
2010-12-19 22:54 1299在某些情况下,用户需要查找一定范围内的文档,比如时间,ID等。 ... -
Lucene 搜索方法(布尔搜索)
2010-12-19 22:04 1626布尔搜索: 布尔查询的对象中,包含一个子句的集合。各种子句间都 ... -
Lucene 搜索方法(词条搜索)
2010-12-19 21:15 1267词条搜索是LUCENE最为简单的一种搜索方式,通过对某个固定的 ...
相关推荐
以下是关于使用Lucene实现索引查询的详细知识: ### 一、创建索引 创建索引是Lucene的核心过程,它涉及到以下步骤: 1. **定义索引目录**:首先,你需要指定一个目录来存储索引文件。这通常是一个文件夹,可以...
3. **优化索引**:如果你想立即删除文档并释放磁盘空间,你可以调用`IndexWriter.optimize()`方法,这会强制进行段合并,但是请注意,这个操作可能会消耗大量资源且耗时较长,因此通常不推荐在高并发环境中频繁使用...
**基于Lucene技术的增量索引** 在信息技术领域,全文搜索引擎是处理大量数据查询的关键工具。Apache Lucene是一个开源的全文检索库,被广泛应用于构建高效、可扩展的搜索功能。本文将深入探讨如何利用Lucene实现...
以上就是关于“Lucene索引的简单使用”的详细介绍,包括其核心概念、创建和查询索引的步骤以及一些高级特性。希望对你理解和应用Lucene有所帮助。在实际开发中,可以根据需求选择合适的Analyzer,优化索引策略,以...
lucene 做索引查询流程,来自《lucene in action》
它为开发者提供了构建搜索应用所需的所有基本工具,包括索引文档、执行查询、处理分析等。Lucene3.0是该系列的一个版本,在性能和稳定性方面都有所提升。 #### 二、创建索引的基本步骤 根据提供的描述,创建索引的...
**Lucene索引和查询** Lucene是Apache软件基金会的开放源码全文搜索引擎库,它提供了文本检索的核心工具,使得开发者能够快速构建自己的搜索应用。本项目中的代码旨在展示如何利用Lucene对多个文件夹下的数据进行...
在Eclipse环境中运用java,Lucene建索引及查询关键字
Lucene 删除 合并索引,可以指定几个索引文件合并成一个索引文件。自己写的,有很多不足之处请多指教
#### 四、Lucene3建立索引的步骤 1. **创建Directory对象**:指定索引文件的存储位置。 2. **创建IndexWriter对象**:初始化索引写入器,设置分析器、是否创建新索引等参数。 3. **获取源文件**:加载需要索引的...
3. **界面化搜索**:在实现用户界面时,可能会遇到各种技术选择,如使用JavaBeans、直接在JSP中调用,或者通过数据库查询。选择适合项目需求的方式,保持代码的清晰和可维护性。 4. **文档获取**:在检索结果后,...
- Lucene的核心能力在于文档索引和查询,它提供了强大的API来实现高效的文档检索。 2. **XML简介** - XML(Extensible Markup Language,可扩展标记语言)是一种用来标记数据的语言,它定义了用于描述结构化文档...
3. **评分与排序**:在查询时,Lucene.NET会根据查询词在文档中的出现频率、位置等因素计算一个评分,用于决定查询结果的排序。 4. **更新与删除**:索引不是静态的,随着数据的变化,需要支持添加新文档、更新已有...
**Lucene索引器实例详解** Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,被广泛应用于各种搜索引擎的构建。它提供了一个高级的、灵活的、可扩展的接口,使得开发者能够轻松地在应用程序中实现全文...
**Lucene索引结构原理** Lucene是Apache软件基金会的开放源代码全文搜索引擎库,它为Java开发人员提供了强大的文本搜索功能。理解Lucene的索引结构原理对于优化搜索性能和设计高效的搜索应用至关重要。 首先,我们...
以下是对Lucene索引机制的详细解析: 一、Lucene的索引过程 1. 文档分析:当向Lucene添加文档时,首先会经过一个分词器(Tokenizer),将文本拆分成一系列的词项(Token)。接着,这些词项会被过滤(Filter)和...
一个Lucene索引是由多个文件组成的,包括但不限于 segments文件、.del文件(删除文档标记)、.tii和.tis文件(Term Info Index和Term Info postings)、.frx、.fdx、.fdt、.fdt(Field Data)等。这些文件共同构成了...
二、Lucene索引创建流程 1. 初始化:首先,我们需要导入Lucene库,并创建一个标准的Analyzer,例如StandardAnalyzer,它对输入的文本进行标准化处理。 2. 创建索引目录:索引数据会存储在一个Directory对象中,...
创建索引是全文检索的基础,它涉及将文本数据结构化为Lucene可以理解和查询的形式。开发者可以通过Analyzer类来处理输入的文本,进行分词、去除停用词等预处理步骤。然后,使用Document类表示要索引的数据,Field类...