- 浏览: 297669 次
- 性别:
- 来自: 东京
文章分类
最新评论
-
80后的童年2:
企业级分布式搜索平台Solr视频教程网盘地址:https:// ...
企业级搜索引擎Solr使用入门指南 -
springdata_spring:
apache lucene开源框架demo使用实例教程源代码下 ...
Lucene / Solr 开发经验 -
springdata-jpa:
java web开发分页demo源代码下载:http://ww ...
简易java分页标签 -
zjf_sdnu:
兄弟,script写错了
jqGrid初学备注 -
85600367:
你好,请教一个问题。当进行分布式查询时solr无法查询到Luc ...
Lucene / Solr 开发经验
一,查询
一个关键字,对一个字段进行查询
QueryParser qp = new QueryParser("content",analyzer); query = qp.parse(keyword); Hits hits = searcher.search(query);
模糊查询
Term term = new Term("content",keyword); FuzzyQuery fq = new FuzzyQuery(term); Hits hits = searcher.search(fq);
一个关键字,在两个字段中查询
1.BooleanClause.Occur[]的三种类型: MUST : + and MUST_NOT : - not SHOULD : or
2.下面查询的意思是:content中必须包含该关键字,而title有没有都无所谓
3.下面的这个查询中,Occur[]的长度必须和Fields[]的长度一致。每个限制条件对应一个字段
BooleanClause.Occur[] flags = new BooleanClause.Occur[]{BooleanClause.Occur.SHOULD,BooleanClause.Occur.MUST}; query=MultiFieldQueryParser.parse(keyword,new String[]{"title","content"},flags,analyzer);
两个(多个)关键字对两个(多个)字段进行查询,默认匹配规则
1.关键字的个数必须和字段的个数相等
2.由于没有指定匹配规定,默认为"SHOULD" 因此,下面查询的意思是:"title"中含有keyword1 或 "content"含有keyword2。在此例中,把keyword1和keyword2相同
query=MultiFieldQueryParser.parse(new String[]{keyword,keyword},new String[]{"title","content"},analyzer);
两个(多个)关键字对两个(多个)字段进行查询,手工指定匹配规则
1.必须 关键字的个数 == 字段名的个数 == 匹配规则的个数
2.下面查询的意思是:"title"必须不含有keyword1,并且"content"中必须含有keyword2
BooleanClause.Occur[] flags = new BooleanClause.Occur[]{BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.MUST}; query=MultiFieldQueryParser.parse(new String[]{keyword,keyword},new String[]{"title","content"},flags,analyzer);
对数字范围进行查询
1.两个条件必须是同一个字段
2.前面一个条件必须比后面一个条件小,否则找不到数据
3.new RangeQuery中的第三个参数,表示是否包含"=" true: >= 或 <= false: > 或 <
4.找出 55>=id>=53 or 60>=id>=57:
Term lowerTerm1 = new Term("id","53"); Term upperTerm1 = new Term("id","55"); RangeQuery rq1 = new RangeQuery(lowerTerm1,upperTerm1,true); Term lowerTerm2 = new Term("id","57"); Term upperTerm2 = new Term("id","60"); RangeQuery rq2 = new RangeQuery(lowerTerm2,upperTerm2,true); BooleanQuery bq = new BooleanQuery(); bq.add(rq1,BooleanClause.Occur.SHOULD); bq.add(rq2,BooleanClause.Occur.SHOULD); Hits hits = searcher.search(bq);
二:结果排序
排序的关键点有两个:
1:首先你要排序的字段必须是被index的,并且是untokenized的。如:
doc.add(new Field("click", dv.get("click").toString(), Field.Store.NO, Field.Index.UN_TOKENIZED));
2:在检索时候:如:
排序
1.被排序的字段必须被索引过(Indexecd),在索引时不能 用 Field.Index.TOKENIZED (用UN_TOKENIZED可以正常实现.用NO时查询正常,但排序不能正常设置升降序)
2.SortField类型 SCORE、DOC、AUTO、STRING、INT、FLOAT、CUSTOM 此类型主要是根据字段的类型选择
3.SortField的第三个参数代表是否是降序true:降序 false:升序
Sort sort = new Sort(new SortField[]{new SortField("click", SortField.INT, true)}); Hits hits = searcher.search(querystring,sort);
按日期排序
Sort sort = new Sort(new SortField[]{new SortField("createTime", SortField.INT, false)});
过滤器
QueryParser qp1 = new QueryParser("content",analyzer); Query fquery = qp1.parse("我"); BooleanQuery bqf = new BooleanQuery(); bqf.add(fquery,BooleanClause.Occur.SHOULD); QueryFilter qf = new QueryFilter(bqf); Hits hits = searcher.search(query);
--------------------------------------------------
IndexSearcher.search(Query,Sort);
new Sort() 和 Sort.RELEVANCE,以及null一样,采用默认排序,要定义排序字段,方法是将字段传入Sort对象
Sort sort = new Sort(String field);
也可以对多个字段排序Sort sort = new Sort(String[] fields);
例:
Sort sort = new Sort(new SortField[]{new SortField(“title”),new SortField(“name”)});
Hits hits=searcher.search(query,Sort);
多字段查找MultiFieldQueryParser
只在某些Term中查找,不关心在哪个字段
Query query = new MultiFieldQueryParser.parse(“word”,new String[]{“title”,”content”},analyzer); //在title和content中找word
多字段时默认是OR关系,要改变它,使用以下方法:
Query query = MultiFieldQueryParser.parse(“word”,new String[]{“title”,”content”},new int[]{MultiFieldQueryParser.REQUIRED_FIELD,MultiFieldQueryParser.PROHIBITED_FIELD},analyzer);
其中:
REQUIRED_FIELD 表示该条件必须有
PROHIBITED_FIELD 表示必须不含
搜索多个索引文件MultiSearcher
1) 建立多个索引:使用不同的索引目录,实例化不同的IndexWriter
2) 建立多索引搜索器:
Searcher[] searchers = new SEARCHER[2];
Searchers[0] = new IndexSearcher(dir1); //搜索索引目录一
Searchers[1]= new IndexSearcher(dir2);//搜索索引目录二
Searcher searcher = new MultiSearcher(serarchers);
3) 开始查询:Hits hits = searcher.search(query);
发表评论
-
Struts2 Jsonplugin 详解
2009-07-08 21:41 7100本文转自: http://www.blogjava.net/f ... -
一点struts json备注
2009-07-05 00:30 1534下载struts json插件:jsonplugin-0.33 ... -
Hibernate annotation简单配置
2009-06-29 00:04 1657<?xml version="1.0" ... -
Liferay下整合Spring和Hibernate开发Plugin初试
2009-05-26 00:41 4896简单的说,完全不知道Liferay下应该如何做开发。所以完全凭 ... -
Liferay plugin开发入门
2009-05-19 00:10 2725本篇部分引用以下文章: http://daoger.itey ... -
Hibernate通用DAO
2009-01-02 17:46 3625/** * @author Clay Zhong, zjcl ... -
Acegi获取用户信息
2008-12-04 23:38 2856import org.acegisecurity.Authen ... -
Acegi详解
2008-11-16 21:15 1767本文转自:http://www.yuanma.org/data ... -
velocity.properties source code
2008-11-04 22:37 3003# Licensed to the Apache Softwa ... -
DetachedCriteria,Hibernate模糊查询
2008-09-21 10:59 41991,假设存在Thesis对象: package org.cms ... -
Solr中SimplePostTool的修改
2008-09-15 22:38 2985将源代码修改为传递字符串,去掉files以及stdin模式。 ... -
Struts2,Spring2,Hibernate3整合
2008-09-15 11:44 33801. web.xml <?xml version=&qu ... -
企业级搜索引擎Solr使用入门指南
2008-09-10 22:43 16681本文转自 http://chuanliang2 ... -
Lucene / Solr 开发经验
2008-09-10 22:12 20032转自 Lucene/Solr开发经验[原] 作者 张驰有道 ... -
Lucene初学备注
2008-09-07 19:51 12631,检索文件目录,创建index import java.io ... -
JR各Ajax框架基础教程收集
2008-08-24 12:19 1212JQuery: http://www.javaresearch ... -
Spring 2.0 中配置 JPA
2008-04-20 16:57 3896翻译:SpringSide团队 转载请注明出处。 本文提供了 ... -
Hibernate延迟加载
2008-02-09 16:22 2738延迟初始化错误是运用Hibernate开发项目时最常见的错误。 ... -
Properties资源文件编码
2008-01-26 17:26 15171、展开Eclipse的Help菜单,将鼠标移到Softwar ... -
struts+hibernate分页
2007-12-17 20:53 1727新建表 sql 代码 DROP DATABAS ...
相关推荐
3. 结果排序:Lucene提供TF-IDF(词频-逆文档频率)算法进行默认的排名。开发者也可以自定义评分函数,根据实际需求调整结果的排序。 4. 结果集获取:使用TopDocs类来获取搜索结果,它包含了匹配文档的数量以及按...
**Lucene 高级搜索项目概述** Lucene 是一个高性能、全文检索库,它提供了文本分析、索引和搜索功能,被广泛应用于各种搜索引擎的构建。在这个“Lucene 高级搜索项目”中,我们将深入探讨如何利用Lucene实现附件...
在"Lucene全文搜索_LuceneJava全文搜索_"这个主题中,我们将深入探讨Lucene如何在Java环境中实现高效的全文搜索引擎。首先,Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)和搜索(Search)。...
**Lucene 常用功能介绍** Lucene 是一个高性能、全文检索库,由Apache软件基金会开发并维护。它提供了一个简单但功能强大的API,用于在各种应用中实现全文索引和搜索。以下是对Lucene常用功能的详细介绍: 1. **...
**Lucene常用Demo详解** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它提供了文本分析、索引构建、搜索功能的核心工具,是Java开发者在项目中实现全文检索的重要利器。本篇文章将深入探讨...
文章主要研究和应用了基于Lucene的搜索引擎,其特点是利用开源网络爬虫工具抓取互联网信息,并通过Lucene的API对特定信息进行索引和搜索。下面详细介绍相关知识点。 1. Lucene基础 Lucene是由Apache软件基金会提供...
3. **结果排序与展示**:除了Lucene的基本评分,还可以根据用户行为、时间戳等因素自定义排序算法。同时,搜索结果页面需要设计友好,提供清晰的摘要和链接,方便用户进一步查看。 4. **反馈与迭代**:监控用户搜索...
本文将对Lucene部分常用代码进行详细解释,包括多字段搜索、多条件搜索、过滤等。 多字段搜索 在Lucene中,我们可以使用MultifieldQueryParser来指定多个搜索字段。MultifieldQueryParser可以将多个字段合并到一个...
### 基于Lucene的搜索策略研究 随着信息技术的发展和社会信息化程度的加深,人们面临着海量数据的管理和检索挑战。如何高效地从大量的文档中找到所需的信息成为了亟待解决的问题。在这种背景下,Lucene作为一种开源...
LUCENE是一款开源的Java库,它为开发者提供了构建搜索引擎所需的核心功能,包括索引创建、文本分析、查询解析以及结果排序等。 一、LUCENE基础知识 LUCENE的核心概念主要包括文档(Document)、字段(Field)、...
5. **结果排序(Resuliting Sorting)**: 按照评分从高到低排序搜索结果,返回给用户。 ### 三、使用Lucene进行站内搜索 1. **集成Lucene**: 在项目中引入Lucene库,创建索引目录,并实例化IndexWriter用于写入...
Lucene 排序、设置权重、优化、分布式搜索 Lucene 是一个高性能的搜索引擎库,它提供了强大的文本搜索和索引能力。下面我们将详细介绍 Lucene 的排序、设置权重、优化和分布式搜索等知识点。 一、Lucene 排序 ...
在搜索引擎技术中,Apache Lucene ...总的来说,理解并掌握 Lucene 自定义排序是提升搜索体验的关键,它使我们能够根据业务需求灵活地调整搜索结果的呈现方式。通过实践和学习,你可以创建出更符合用户需求的搜索引擎。
### Lucene全文搜索知识点概述 #### 一、全文检索的基本概念及应用场景 1. **全文检索定义**: - 全文检索是指从大量文本信息中快速、准确地查找出包含特定关键词或短语的文档的技术。 - 搜索内容为文本信息(非...
lucene 近实时搜索 很清楚的解释了关于lucene近实时搜索的代码。很值得学习
Lucene是一个由Java编写的高性能、可扩展的全文搜索引擎库。它提供了一种机制,使得开发者能够轻松地为自己的应用程序添加索引和搜索功能。作为Apache软件基金会的项目,Lucene具有开源和免费的特性,受到Apache软件...
在Lucene排序的场景下,`pom.xml`文件可能会包含Lucene库和其他相关库的依赖声明,如Solr(一个基于Lucene的企业级搜索服务器),以便在项目中引入必要的功能。此外,`pom.xml`还可以配置Maven插件,以执行构建、...
5. **结果集处理**:查询执行后,如何获取和处理`TopDocs`结果,包括排序、分页和展示搜索结果。 6. **优化和性能**:可能涉及到的搜索优化技巧,如使用字段缓存提高性能,或者调整查询参数以适应不同的搜索需求。 ...
Lucene的核心功能包括文档分析、索引创建、查询解析和结果排名等,广泛应用于各种信息检索系统中。 ### 2. Regain特性 Regain搜索引擎有以下几个主要特点: - **易于使用**:Regain简化了Lucene的使用流程,提供...
**Lucene搜索引擎简介** Lucene是一个高性能、全文检索库,由Apache软件基金会开发并维护,是Java编程语言中广泛使用的开源搜索引擎框架。它为开发者提供了在应用程序中实现全文索引和搜索功能的基础工具。Lucene的...