首页
学习
活动
专区
圈层
工具
发布

Apache Lucene入门教程:强大的全文搜索引擎库

今天我想和大家聊聊Apache Lucene这个超级实用的全文搜索引擎库。不知道你有没有想过,像Google那样的搜索功能是怎么实现的?或者你的网站、应用是不是也需要一个强大的搜索功能?...Lucene最厉害的地方在于:超高效的索引和搜索能力强大的查询语法多种语言的分析器支持拼写检查与纠错功能排序与过滤能力可扩展性极强简单说,如果你需要在大量文本中快速找到相关内容,Lucene就是你的不二选择...这个过程包括:分词:将文本切分成单词或词组大小写转换:通常转为小写以便不区分大小写搜索停用词过滤:移除"the"、"is"等常见词词干提取:将"running"、"runs"转换为基本形式"run"Lucene...查询(Query)Lucene提供丰富的查询类型,包括:TermQuery:最基本的词项查询PhraseQuery:短语查询BooleanQuery:组合多个查询条件(AND/OR/NOT)RangeQuery...TermQuery(new Term("content", "搜索")), BooleanClause.Occur.MUST);Query query = builder.build();// 范围查询Query rangeQuery

40210

Elasticsearch 在地理信息空间索引的探索和演进

3.1 史前时代Elasticsearch是基于Lucene构建的搜索引擎。Lucene最开始的设想是一个全文检索工具箱,即支持字符串检索,并没有考虑数值类型的处理。...Lucene提供了一种适配方案RangeQuery。就是用枚举来模拟数值查询。...LUCENE-1470,LUCENE-1582,LUCENE-1602,LUCENE-1673,LUCENE-1701, LUCENE-1712 Added NumericRangeQuery and...利用Haversine公式计算中心点和矩形区域内每个坐标点距离,进行第二阶段过滤操作,筛选出最终符合条件的docId集合。方案虽然简单,但是毕竟实现了geo_distance的能力。...queryName, query);} 核心代码参考:GeoPointDistanceQuery、GeoPointRadiusTermsEnum3.4 Elasticsearch 5.0 版本方案优化的探索是没有没有止境的

1.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    lucene.net 应用资料

    Lucene将针对所给的文本进行一些最基本的分析,并从中去除一些不必要的信息,比如一些常用字a ,an, the 等等,如果搜索的时候不在乎字母的大小写, 又可以去掉一些不必要的信息.总而言之你可以把这个过程想象成一个文本的过滤器...,所有的文本内容通过分析, 将过滤掉一些内容,剩下最有用的信息. 3.      ...更新索引中的文档    这个功能Lucene没有支持, 只有通过删除后在添加来实现. 看看代码,很好理解的....让你吃惊的是这里的优化对于建立索引不仅没有起到加速的作用,反而是延长了建立索引的时间.为什么?...第一个准则很容易理解,第二个准则说明Lucene对并发的操作支持还是不错的.第三个准则也很正常,不过需要注意的是第三个准则只是表明IndexWriter和IndexReader不能并存,而没有反对在多线程中利用同一个

    53920

    ElasticSearch优化会员列表搜索

    ElasticSearch简介 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。...当数据少的时候可能还不明显,但是一旦数据多了,数据库就会被严重拖慢,就算使用索引以及对SQL语句进行优化,可以优化的空间也很少的情况下,那么就可以考虑使用搜索引擎来优化搜索了,Java开源的搜索引擎有很多,比如Lucene...等等,具体选用哪种引擎可以根据不同的引擎的特性来选择,而我是基于引擎本身特性、实施难度、学习开发难度、速度综合来选择的,当然ElasticSearch对于我们来说不一定是最优的,但是技术解决方案永远都没有最优的...[65536] vi /etc/security/limits.conf 如果有 * soft nofile 65535 * hard nofile 65535 则将65535修改为65536,如果没有则在后面添加...示例 QueryBuilders.rangeQuery("age").gte(10).lte(20); 搜索会员年龄(age)在10到20岁之间的会员 boolQuery 示例 BoolQueryBuilder

    1.1K50

    不要使用没有 DNS 过滤的公共 Wi-Fi

    它们要求公共 Wi-Fi 提供商采取某些预防措施,例如数据保护和 DNS 过滤。...公共 Wi-Fi 的 DNS 过滤服务 拥有可靠的DNS 过滤服务可以在恶意软件、勒索软件、网络钓鱼和僵尸网络等网络威胁到达网络设备之前阻止它们,从而为您的公共 Wi-Fi 添加额外的保护层。...此外,您将能够过滤掉不受欢迎的内容,例如色情材料、暴力和与毒品相关的内容,以确保您的网络适合家庭,并且您会收到更少的投诉。...安全DNS 十多年来,SafeDNS 一直提供出色的基于云的 Web 过滤。他们的服务包括友好的 24/7 支持、实惠的价格、易于部署和管理(您可以在几分钟内开始过滤)以及许多其他功能。

    84420

    Lucene 全文检索

    其中,Term是Lucene最小的语汇单元,不可再细分。 分词的时候经历了一系列的过滤器。如大小写转换、去除停用词等。 ? 从上图中,我们发现: 索引库中有两个区域:索引区、文档区。...在实际的开发中,我们的查询的业务是相对复杂的,比如我们在通过关键词查找的时候,往往进行价格、商品类别的过滤。而Lucene提供了一套查询方案,供我们实现复杂的查询。...System.out.println(doc.get("description")); } //关闭读取流 reader.close(); } 6.2.3 数字类型的 RangeQuery...description); documents.add(doc); }); return documents; } 使用对应的 FloatPoint 的静态方法,获得 RangeQuery...* 如果在搜索的时候,没有特别指定搜索的域,则按照默认的域进行搜索 * 指定搜索的域的方式: 域名:关键词 如: name:java * 参数二

    2K61

    Apache Lucene全局搜索引擎入门教程

    —— [ 百度百科 ] 数据库索引和Lucene检索对比 比较项 Lucene检索 数据库检索 数据检索 从Lucene的索引文件中检出 由数据库索引检索记录 索引结构 Document(文档)...Lucene搜索过程 Lucene的索引结构是文档(Document)形式的,下面简单介绍一下Lucene搜索的过程 (1)将文档传给分词组件(Tokenizer),分词组件根据标点符号和停词将文档分成词元...停词是指没有特别意思的词。英语的是指比如a、the等等单词 文章1内容:Tom favorite fruit is apple....,如有 TermQuery,BooleanQuery,RangeQuery,WildcardQuery 等一些类。...在lucene 中,搜索的结果的集合是用Hits 类的实例来表示的。 附录 Lucene个版本下载url Lucene易百教程 Lucene4.x系列教程 Lucene全文搜索教程

    3.1K30

    Lucene系列之全局搜索引擎入门教程

    —— [ 百度百科 ] 数据库索引和Lucene检索对比 比较项Lucene检索数据库检索数据检索从Lucene的索引文件中检出由数据库索引检索记录索引结构Document(文档)Record(记录)...全文检索支持不支持模糊查询支持不支持结果排序支持排序不能排序 Lucene搜索的API类主要有4个 IndexSearch,Query,QueryParser,Hits Lucene搜索过程 Lucene...停词是指没有特别意思的词。英语的是指比如a、the等等单词 文章1内容:Tom favorite fruit is apple....,如有 TermQuery,BooleanQuery,RangeQuery,WildcardQuery 等一些类。...在lucene 中,搜索的结果的集合是用Hits 类的实例来表示的。 附录 Lucene个版本下载url Lucene易百教程 Lucene4.x系列教程 Lucene全文搜索教程

    45720

    基于springboot+vue2.0+前后端分离式实现在线网络商城前后台项目

    :网站前台,系统管理后台主要包含技术:springboot,mybatis,mysql,javascript,vue.js,html,css,Jsoup,httpclient主要包含算法:基于用户协同过滤推荐...size).setExplain(true)//从第几个开始,显示size个数据.highlighter(hiBuilder)//设置高亮显示.setPostFilter(QueryBuilders.rangeQuery...("salePrice").gt(priceGt).lt(priceLte))//过滤条件.get();}else if(priceGt>=0&&priceLte>=0&&sort.equals("1"...size).setExplain(true)//从第几个开始,显示size个数据.highlighter(hiBuilder)//设置高亮显示.setPostFilter(QueryBuilders.rangeQuery...size).setExplain(true)//从第几个开始,显示size个数据.highlighter(hiBuilder)//设置高亮显示.setPostFilter(QueryBuilders.rangeQuery

    63720

    为什么加了@WebFilter注解,Spring却没有给我自动注入该过滤器?

    在 Spring 编程中,主要配合如下注解构建过滤器: @ServletComponentScan @WebFilter 那这看起来只是用上这俩注解就能继续摸鱼了呀。...但上了生产后,还是能遇到花式问题: 工作不起来 顺序不对 执行多次等 大多因为想当然觉得使用简单,没有上心。还是有必要精通过滤器执行的流程和原理。...@WebFilter 过滤器无法被自动注入 为统计接口耗时,实现一个过滤器: 该过滤器标记了 @WebFilter。...为什么它没有成为一个普通 Bean?...前文解析可知,使用 @WebFilter 修饰过滤器时,TimeCostFilter 类型的 Bean 并没有注册至 Spring 容器,真正注册的是 FilterRegistrationBean。

    1.6K30

    【搜索引擎】配置 Solr 以获得最佳性能

    配置`filterCache`: 过滤器缓存由 SolrIndexSearcher 用于过滤器。过滤器缓存允许您控制过滤器查询的处理方式,以最大限度地提高性能。...documentCache 缓存保存 Lucene Document 对象(每个文档的存储字段)。由于 Lucene 内部文档 ID 是瞬态的,因此该缓存不会自动预热。...如果您尝试使用 cost_i 字段索引文档,但架构中没有明确定义 cost_i 字段,则 cost_i 字段将具有为 *_i 定义的字段类型和分析。...Solr 中有许多调整旋钮可以帮助您最大限度地提高系统的性能,其中一些我们在本博客中讨论过,在 solr-config 文件中进行更改以使用最佳配置,使用适当的索引选项或字段更新架构文件 类型,尽可能使用过滤器...queriesfq 并使用适当的缓存选项,但这又取决于您的应用程序。

    2.3K20

    使用 ES|QL 进行地理空间距离搜索

    然后我们进行了一个名为“Lucene 推送”的优化,通过确保适当的查询在可能的情况下充分利用底层 Lucene 索引,之后相同的查询只需要 50 毫秒即可完成。那么,这些优化是如何实现的?...在我们的示例中,进行了以下更改:在末尾添加了 LIMIT 1000(如果您自己没有添加,ES|QL 总是会这样做)。...WHERE 子句被分为两部分,一部分按距离过滤,另一部分按 scalerank 过滤,以便精化过程变为:首先按 scalerank 过滤,这是一个已知的索引字段,易于使用“Lucene 推送”优化。...按距离(包括上下界)过滤,这也可能适合后续优化。最后,将所有可以下推到 Lucene 的内容下推:将 scalerank 过滤器下推到 Lucene。...location, TO_GEOSHAPE("CIRCLE(12.565 55.673, 10000)"))也将这些下推到 Lucene,它将使用空间索引快速过滤掉不符合标准的文档。

    41222

    Apache nutch1.5 & Apache solr3.6

    对搜索引擎的理解:我们并没有google 的源代码,因此学习搜索引擎Nutch 是个不错的选择。了解一个大型分布式的搜索引擎如何工作是一件让人很受益的事情。...通过对 Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。...Lucene中操作索引也有这几个步骤,但是没有更新。Lucene更新是先删除,然后添加索引。因为更新索引在一定情况下,效率没有先删除后添加的效率好。...如果应用程序期望请求某些特定的查询,那么在创建新搜索程序或第一 个搜索程序时就应该反注释这些部分并执行适当的查询。...缓存这些过滤器意味着对 Solr 的重复调用可以导致结果集的快速查找。更常见的场景是缓存一个过滤器,然后再发起后续的精炼查询,这种查询能使用过滤器来限制要搜索的文档数。

    2.3K40

    横空出世!MyBatis-Plus同款ES ORM框架,用起来够优雅!

    = ne boolQueryBuilder.mustNot(queryBuilder) > gt QueryBuilders.rangeQuery('es field').gt() >= ge .rangeQuery...('es field').gte() rangeQuery('es field').lt() rangeQuery('es field').lte() like '%field...综合商品搜索 下面我们来实现一个复杂的商品搜索,涉及到过滤、不同字段匹配权重不同以及可以进行排序。...return esProductMapper.pageQuery(wrapper, pageNum, pageSize); } } 再对比下之前使用Spring Data的实现方式,没有...首先来说下需求,可以根据指定商品的ID来查找相关商品,看下接口文档有助于理解; 这里我们的实现原理是这样的:首先根据ID获取指定商品信息,然后以指定商品的名称、品牌和分类来搜索商品,并且要过滤掉当前商品

    1.5K20

    【愚公系列】2023年11月 Java教学课程 212-ElasticSearch(批量操作和查询详解)

    = QueryBuilders.rangeQuery("price"); rangeQuery.gte(2000); rangeQuery.lte(3000); boolQuery.filter(rangeQuery...,过滤文档 3)符合过滤条件的文档,基于算分函数运算,得到函数算分(function score) 4)将原始算分(query score)和函数算分(function score)基于运算模式做运算,...params){ return hotelService.search(params); } } 1.2 搜索业务 我们在controller调用了IHotelService,并没有实现该方法...在之前的业务中,只有match查询,根据关键字搜索,现在要添加条件过滤,包括: 品牌过滤:是keyword类型,用term查询 星级过滤:是keyword类型,用term查询 价格过滤:是数值类型,用range...查询 城市过滤:是keyword类型,用term查询 多个查询条件组合,肯定是boolean查询来组合: 关键字搜索放到must中,参与算分 其它过滤条件放到filter中,不参与算分 因为条件构建的逻辑比较复杂

    29010
    领券