- 浏览: 2663733 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
Lucene 支持多种形式的高级搜索,我们在这一部分中会进行探讨,然后我会使用 Lucene 的 API 来演示如何实现这些高级搜索功能。
布尔操作符
大多数的搜索引擎都会提供布尔操作符让用户可以组合查询,典型的布尔操作符有 AND, OR, NOT。Lucene 支持 5 种布尔操作符,分别是 AND, OR, NOT, 加(+), 减(-)。接下来我会讲述每个操作符的用法。
•OR: 如果你要搜索含有字符 A 或者 B 的文档,那么就需要使用 OR
操作符。需要记住的是,如果你只是简单的用空格将两个关键词分割开,其实在搜索的时候搜索引擎会自动在两个关键词之间加上 OR
操作符。例如,“Java OR Lucene” 和 “Java Lucene” 都是搜索含有 Java 或者含有 Lucene 的文档。
•AND: 如果你需要搜索包含一个以上关键词的文档,那么就需要使用 AND 操作符。例如,“Java AND Lucene” 返回所有既包含 Java 又包含 Lucene 的文档。
•NOT: Not 操作符使得包含紧跟在 NOT 后面的关键词的文档不会被返回。例如,如果你想搜索所有含有 Java 但不含有
Lucene 的文档,你可以使用查询语句 “Java NOT Lucene”。但是你不能只对一个搜索词使用这个操作符,比如,查询语句 “NOT
Java” 不会返回任何结果。
•加号(+): 这个操作符的作用和 AND 差不多,但它只对紧跟着它的一个搜索词起作用。例如,如果你想搜索一定包含 Java,但不一定包含 Lucene 的文档,就可以使用查询语句“+Java Lucene”。
•减号(-): 这个操作符的功能和 NOT 一样,查询语句 “Java -Lucene” 返回所有包含 Java 但不包含 Lucene 的文档。
接下来我们看一下如何利用 Lucene 提供的 API 来实现布尔查询。清单1 显示了如果利用布尔操作符进行查询的过程。
清单1:使用布尔操作符
//Test boolean operator
public void testOperator(String indexDirectory) throws Exception{
Directory dir = FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
String[] searchWords = {"Java AND Lucene", "Java NOT Lucene", "Java OR Lucene",
"+Java +Lucene", "+Java -Lucene"};
Analyzer language = new StandardAnalyzer();
Query query;
for(int i = 0; i < searchWords.length; i++){
query = QueryParser.parse(searchWords[i], "title", language);
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results for query " + searchWords[i]);
}
}
域搜索(Field Search)
Lucene 支持域搜索,你可以指定一次查询是在哪些域(Field)上进行。例如,如果索引的文档包含两个域,Title 和
Content,你就可以使用查询 “Title: Lucene AND Content: Java” 来返回所有在 Title 域上包含
Lucene 并且在 Content 域上包含 Java 的文档。清单 2 显示了如何利用 Lucene 的 API 来实现域搜索。
清单2:实现域搜索
//Test field search
public void testFieldSearch(String indexDirectory) throws Exception{
Directory dir = FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
String searchWords = "title:Lucene AND content:Java";
Analyzer language = new StandardAnalyzer();
Query query = QueryParser.parse(searchWords, "title", language);
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results for query " + searchWords);
}
通配符搜索(Wildcard Search)
Lucene
支持两种通配符:问号(?)和星号(*)。你可以使用问号(?)来进行单字符的通配符查询,或者利用星号(*)进行多字符的通配符查询。例如,如果你想搜
索 tiny 或者 tony,你就可以使用查询语句 “t?ny”;如果你想查询 Teach, Teacher 和
Teaching,你就可以使用查询语句 “Teach*”。清单3 显示了通配符查询的过程。
清单3:进行通配符查询
//Test wildcard search
public void testWildcardSearch(String indexDirectory)throws Exception{
Directory dir = FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
String[] searchWords = {"tex*", "tex?", "?ex*"};
Query query;
for(int i = 0; i < searchWords.length; i++){
query = new WildcardQuery(new Term("title",searchWords[i]));
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results for query " + searchWords[i]);
}
}
模糊查询
Lucene 提供的模糊查询基于编辑距离算法(Edit distance algorithm)。你可以在搜索词的尾部加上字符 ~
来进行模糊查询。例如,查询语句 “think~” 返回所有包含和 think 类似的关键词的文档。清单 4 显示了如果利用 Lucene 的
API 进行模糊查询的代码。
清单4:实现模糊查询
//Test fuzzy search
public void testFuzzySearch(String indexDirectory)throws Exception{
Directory dir = FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
String[] searchWords = {"text", "funny"};
Query query;
for(int i = 0; i < searchWords.length; i++){
query = new FuzzyQuery(new Term("title",searchWords[i]));
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results for query " + searchWords[i]);
}
}
范围搜索(Range Search)
范围搜索匹配某个域上的值在一定范围的文档。例如,查询 “age:[18 TO 35]” 返回所有 age 域上的值在 18 到 35 之间的文档。清单5显示了利用 Lucene 的 API 进行返回搜索的过程。
清单5:测试范围搜索
//Test range search
public void testRangeSearch(String indexDirectory)throws Exception{
Directory dir = FSDirectory.getDirectory(indexDirectory,false);
IndexSearcher indexSearcher = new IndexSearcher(dir);
Term begin = new Term("birthDay","20000101");
Term end = new Term("birthDay","20060606");
Query query = new RangeQuery(begin,end,true);
Hits results = indexSearcher.search(query);
System.out.println(results.length() + "search results is returned");
}
发表评论
-
三种solr提交(commit)索引的方式
2014-03-01 13:40 20952三种solr提交索引的 ... -
solr build索引性能
2014-03-01 13:26 1548测试代码 package mytest; impo ... -
Solr性能优化之filterCache
2014-02-27 10:48 956原文:Solr性能优化之filterCache 什么是f ... -
SolrCore查询过程源码分析
2014-02-12 15:37 1257一.环境启动代码 SolrResourceLoader. ... -
通过设置SolrInputDocument 的boost来改变文档评分
2014-01-31 23:18 1554solr通过关键字查询后的文档得分最后要乘以这个boost因 ... -
Solr 使用 Log4j
2014-01-25 21:31 2405原文出处:http://blog.chenlb.com/20 ... -
solr基本概念
2014-01-25 20:49 1416原文:http://www.solrtutorial.com ... -
solr load比较高
2013-12-02 09:50 1073最近solr的load比较高,通过jstack查看: 写 ... -
Solr索引放入内存
2013-08-28 11:45 10032在一次技术群中,中听到一位sina的架构师,他们是采用基于l ... -
solr build索引遇到控制字符的错误
2013-08-23 15:12 634今天build solr 索引遇到如下错误: 发现提 ... -
solr 更新index的最佳实践
2013-08-22 15:24 1023其中重要一点是,solr不运行并发commit。 懒得翻 ... -
Scaling Solr(Solr的扩展)
2013-08-21 20:55 714Solr 的扩展 (Scaling) 当你的索 ... -
Lucene Scoring 评分机制
2013-08-21 20:52 729Lucene 评分体系/机制 ... -
solr build index例子
2013-08-20 14:24 876p = PeopleDO({'userid':101,'s ... -
solr build索引时commit与optimize的概念
2013-08-20 14:22 1959大家都知道,solr在提交索引的时候有commit和opt ... -
solr in action
2013-08-20 13:56 1245solr in action电子书 -
solr的函数查询_FunctionQuery_总结
2012-12-21 15:55 4215作用 函数查询的作用,是影响计算score的算法,并不替 ... -
solr java客户端build索引
2012-12-17 17:08 1101package com.duitang.views.tes ... -
Solr搜索的排序打分规则
2012-11-20 17:48 2467使用Solr搭建搜索引擎很容易,但是如何制定合理的打分规则(b ... -
Solrj
2012-11-20 14:17 1015solr 的java客户端可比python复杂一些,贴点代码: ...
相关推荐
### 利用Lucene实现高级搜索的关键知识点 #### Lucene简介 Lucene是Apache软件基金会下的一个开源全文检索库,提供了高性能的文本搜索能力。它不仅适用于网站的搜索功能,还可以用于任何需要文本搜索的应用场景,如...
在这个“Lucene 高级搜索项目”中,我们将深入探讨如何利用Lucene实现附件搜索、附件内容搜索以及全文搜索等高级功能。 **1. Lucene 搜索引擎基础** Lucene 的核心工作流程包括索引创建和搜索两部分。首先,我们...
**Lucene实现企业搜索实例** 在企业环境中,高效、精准的搜索能力是至关重要的,它可以帮助员工快速定位信息,提高工作效率。Apache Lucene是一个开源的全文检索库,它提供了强大的文本搜索功能,能够帮助企业构建...
**Lucene 搜索引擎实现详解** Lucene 是一个开源全文搜索引擎库,由 Apache 软件基金会维护。它提供了一套强大的数据结构和算法,用于高效地存储和检索大量文本数据。通过 Lucene,开发者可以轻松地在自己的应用...
**Lucene实现企业产品检索** Lucene是一款强大的全文搜索引擎库,由Apache软件基金会开发,它为企业构建高效、可扩展的搜索功能提供了强大的支持。在本文中,我们将深入探讨如何使用Lucene来实现一个类似当当网的...
最后,我们将学习如何利用Lucene的更新和删除功能。在动态数据环境中,我们需要知道如何有效地处理文档的增删改,同时保持索引的一致性和完整性。 总的来说,"Lucene高级搜索进阶项目_03"涵盖了从基础概念到高级...
通过上述高级应用,开发者可以充分利用Lucene的强大功能,构建出满足复杂需求的搜索引擎。无论是优化索引结构,提升查询效率,还是利用高级特性提供更佳的用户体验,Lucene都提供了丰富的工具和策略。在实际项目中,...
《Lucene高级搜索进阶项目_04》 在深入探讨Lucene的高级搜索进阶项目时,我们首先需要理解Lucene的核心概念及其在信息检索中的应用。Lucene是一个高性能、全文本搜索库,它提供了丰富的搜索功能,包括布尔运算、...
**基于Lucene的桌面搜索引擎** 在信息技术飞速发展的今天,数据...利用Lucene的强大功能,不仅可以实现基础的全文搜索,还能进行高级查询,如短语搜索、通配符搜索和近似搜索等,极大地提升了桌面搜索的效率和便利性。
3. 高级搜索:Lucene提供了短语查询、模糊查询、范围查询等高级功能,可以根据需求灵活使用。 4. 排序与过滤:除了基于相关性得分排序外,还可以自定义排序规则。通过Filter机制,可以对搜索结果进行过滤,如按时间...
Lucene的出现,使得开发人员能够轻松地在他们的应用中添加高级搜索功能。作为一个高性能的信息检索库,Lucene主要包含以下组件:索引、搜索、分析和高亮显示。在3.6版本中,它保持了对大量文档高效处理的能力,并且...
在本文中,我们将深入探讨如何使用Apache Lucene这一强大的全文搜索引擎库来实现各种高级搜索形式。Lucene提供了丰富的功能,让开发者能够构建复杂的查询,满足用户的精确搜索需求。 首先,我们要了解布尔操作符。...
本篇文章将详细探讨如何在C#环境下利用Lucene实现快速搜索。 首先,让我们了解Lucene的基本概念。Lucene是一个开源的Java库,提供了索引和搜索文本的高级工具。它能够对文本进行分词,建立倒排索引,并支持布尔查询...
除了基础的搜索功能,Lucene还支持布尔查询、短语查询、模糊查询、评分和排序等高级搜索特性。此外,通过使用Lucene的更新和删除机制,可以确保索引始终与数据源保持同步,保证搜索的准确性。 综上所述,基于Lucene...
《基于LUCENE的搜索引擎设计与实现》 搜索引擎是互联网信息时代的重要工具,它使得海量数据的检索变得...通过学习和实践,我们可以利用LUCENE的强大功能,构建出高效、智能的搜索引擎,满足各种场景下的信息检索需求。
《Lucene高级搜索进阶项目_02》 在深入探讨Lucene的高级搜索进阶项目之前,我们先来理解一下Lucene的核心概念。Lucene是Apache软件基金会的一个开源全文检索库,它提供了高效的文本搜索引擎功能。这个项目_02显然是...
王学松老师的源代码提供了丰富的示例,涵盖了Lucene和Nutch的各个方面,包括如何配置和运行Nutch爬虫,如何自定义分词器,以及如何利用Lucene进行高效检索。通过学习这些源代码,开发者可以: 1. 学习Nutch的配置与...
1. ** autocomplete**:利用Lucene的PrefixQuery或FuzzyQuery实现自动补全功能。 2. ** faceted search**:通过分类或属性过滤,使用户能更精确地导航搜索结果。 3. ** spell checking**:使用SpellChecker组件检查...
本文将深入探讨如何利用Lucene来构建一个站内检索系统,特别关注其索引和搜索功能,以及如何通过优化提高检索效率。 首先,我们需要了解Lucene的基本工作原理。Lucene通过建立倒排索引来实现全文检索。倒排索引是一...
Lucene.NET提供了强大的文本分析、索引和搜索功能,使得开发者可以轻松地在应用程序中集成高级搜索功能。其核心特性包括分词、评分、过滤和排序等,支持多种数据源的索引,如文件系统、数据库等。 .NET爬虫,又称...