Lucene/Solr
Lucene/Solr
杨林伟
像火箭科学家一样思考!
展开
-
25对Solr的思考
写完文章后对Solr不是有一个很清晰的认识,所以问了一下同事,实际开发中的solr是怎样的。下面从京东商城举个例子来记录下。打开京东商城,输入“零食”两个字,会展示出如下内容:会查询的各种各样的零食,为什么会这么快就查询出来呢?如果直接查询数据库,使用LIKE的操作,那该多久才查出来。其实这里使用到了类似于solr的技术。可以这样去思考,如下图:在用户上传商品的时候,会上传图片,标题...原创 2019-05-10 18:49:41 · 242 阅读 · 0 评论 -
24Solr项目案例
原型分析系统架构工程搭建创建一个web工程导入jar包1、springmvc的相关jar包2、solrJ的jar包3、Example\lib\ext下的jar包1.web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema...原创 2019-05-10 17:43:50 · 364 阅读 · 0 评论 -
23Solr复杂查询 - 使用solrj查询
其中包含查询、过滤、分页、排序、高亮显示等处理。//复杂查询索引 @Test public void queryIndex2() throws Exception { //创建连接 SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //创建一个query对象 SolrQuery ...原创 2019-05-10 17:36:36 · 684 阅读 · 0 评论 -
22Solr复杂查询 - 使用后台查询
通过/select搜索索引,Solr制定一些参数完成不同需求的搜索:1.q - 查询字符串,必须的,如果查询所有使用*:*。2.fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:过滤查询价格从1到20的记录。也可以在“q”查询条件中使用product_price:[1 TO 20],如下:也可以使用“*”表示无限,例如:2...原创 2019-05-10 17:34:51 · 519 阅读 · 0 评论 -
21Solr批量导入数据
使用dataimport插件批量导入数据。第一步:把dataimport插件依赖的jar包添加到solrcore(collection1\lib)中还需要mysql的数据库驱动。第二步:配置solrconfig.mxl文件,添加一个requestHandler<requestHandler name="/dataimport" class="org.apache.solr.han...原创 2019-05-10 17:28:17 · 463 阅读 · 0 评论 -
20Solr配置中文分析器
Schema.xmlschema.xml,在SolrCore的conf目录下,它是Solr数据表配置文件,它定义了加入索引的数据的数据类型的。主要包括FieldTypes、Fields和其他的一些缺省设置。FieldType域类型定义下边“text_general”是Solr默认提供的FieldType,通过它说明FieldType定义的内容:FieldType子结点包括: name,...原创 2019-05-10 17:09:31 · 304 阅读 · 0 评论 -
19使用SolrJ管理索引库
什么是solrJsolrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图:依赖的jar包添加文档实现步骤第一步:创建一个java工程第二步:导入jar包。包括solrJ的jar包。还需要代码实现注意: 里面的field的键值必须 solr安装目录/solr/conf 目录下的...原创 2019-05-10 16:41:10 · 488 阅读 · 0 评论 -
18Solr管理索引库
添加/更新文档删除文档删除索引格式如下:1) 删除制定ID的索引<delete> <id>8</id></delete><commit/>2) 删除查询到的索引数据<delete> <query>product_catalog_name:幽默杂货</query></del...原创 2019-05-10 16:08:44 · 497 阅读 · 0 评论 -
17Solr后台管理操作入门
Core selector选择一个SolrCore进行详细操作,如下:Analysis通过此界面可以测试索引分析器和搜索分析器的执行情况。Dataimport可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。Document通过此菜单可以创建索引、更新索引、删除索引等操作,界面如下:/update表示更新索引,solr默认根据id(唯一约束)域来更新Docum...原创 2019-05-10 15:34:10 · 349 阅读 · 0 评论 -
16Solr后台管理界面介绍
管理界面Dashboard仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。LoggingSolr运行日志信息Core AdminSolr Core的管理界面。Solr Core 是Solr的一个独立运行实例单位,它可以对外提供索引和搜索服务,一个Solr工程可以运行多个SolrCore(Solr实例),一个Core对应一个索引目录。添加solrco...原创 2019-05-10 15:22:14 · 354 阅读 · 0 评论 -
14Solr Home与SolrCore
Solr Home与SolrCore创建一个Solr home目录,SolrHome是Solr运行的主目录,目录中包括了运行Solr实例所有的配置文件和数据文件,Solr实例就是SolrCore,一个SolrHome可以包括多个SolrCore(Solr实例),每个SolrCore提供单独的搜索和索引服务。example\solr是一个solr home目录结构,如下:上图中“collec...原创 2019-05-10 13:46:37 · 433 阅读 · 0 评论 -
13Solr的安装与配置
Solr的下载从Solr官方网站(http://lucene.apache.org/solr/ )下载Solr4.10.3,根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage。Solr的文件夹结构将so...原创 2019-05-10 13:41:08 · 269 阅读 · 0 评论 -
12Solr简介
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XM...原创 2019-05-10 13:36:17 · 257 阅读 · 0 评论 -
11Lucene相关度排序
什么是相关度排序相关度排序是查询结果按照与查询关键字的相关性进行排序,越相关的越靠前。比如搜索“Lucene”关键字,与该关键字最相关的文章应该排在前边。相关度打分Lucene对查询关键字和索引文档的相关度进行打分,得分高的就排在前边。如何打分呢?Lucene是在用户进行检索时实时根据搜索的关键字计算出来的,分两步:1)计算出词(Term)的权重2)根据词的权重值,采用空间向量模型算法计...原创 2019-05-10 11:19:37 · 563 阅读 · 0 评论 -
10 Lucene索引库查询 - queryparser查询
通过QueryParser也可以创建Query,QueryParser提供一个Parse方法,此方法可以直接根据查询语法来查询。Query对象执行的查询语法可通过System.out.println(query);查询。需要使用到分析器。建议创建索引时使用的分析器和查询索引时使用的分析器要一致。QueryParser需要加入queryParser依赖的jar包。1.程序实现@Test...原创 2019-05-10 11:12:00 · 378 阅读 · 0 评论 -
09 Lucene索引库查询 - query子类查询
MatchAllDocsQuery使用MatchAllDocsQuery查询索引目录中的所有文档@Testpublic void testMatchAllDocsQuery() throws Exception { IndexSearcher indexSearcher = getIndexSearcher(); //创建查询条件 Query query = new MatchAllD...原创 2019-05-10 11:04:50 · 493 阅读 · 0 评论 -
08Lucene索引库查询 - 介绍
对要搜索的信息创建Query查询对象,Lucene会根据Query查询对象生成最终的查询语法,类似关系数据库Sql语法一样Lucene也有自己的查询语法,比如:“name:lucene”表示查询Field的name为“lucene”的文档信息。可通过两种方法创建查询对象: 1)使用Lucene提供Query子类Query是一个抽象类,lucene提供了很多查询对象,比如TermQuery项精...原创 2019-05-10 11:00:37 · 498 阅读 · 0 评论 -
07Lucene索引库的修改
原理就是先删除后添加。//修改索引库 @Test public void updateIndex() throws Exception { IndexWriter indexWriter = getIndexWriter(); //创建一个Document对象 Document document = new Document(); //向document对象中添加域。 /...原创 2019-05-10 10:58:18 · 592 阅读 · 0 评论 -
06Lucene索引库的删除
删除全部//删除全部索引 @Test public void deleteAllIndex() throws Exception { IndexWriter indexWriter = getIndexWriter(); //删除全部索引 indexWriter.deleteAll(); //关闭indexwriter indexWriter.close(); }说...原创 2019-05-10 10:57:23 · 574 阅读 · 0 评论 -
05Lucene索引库的添加
步骤向索引库中添加document对象。第一步:先创建一个indexwriter对象第二步:创建一个document对象第三步:把document对象写入索引库第四步:关闭indexwriter。代码实现//添加索引 @Test public void addDocument() throws Exception { //索引库存放路径 Directory directo...原创 2019-05-10 10:53:52 · 627 阅读 · 0 评论 -
04全文检索-分析器
分析器(Analyzer)的执行过程如下图是语汇单元的生成过程:从一个Reader字符流开始,创建一个基于Reader的Tokenizer分词器,经过三TokenFilter生成语汇单元Token。要看分析器的分析效果,只需要看Tokenstream中的内容就可以了。每个分析器都有一个方法tokenStream,返回一个tokenStream对象。中文分析器1.分析器的分词效果//查...原创 2019-05-10 10:16:25 · 320 阅读 · 0 评论 -
04Lucene入门程序
需求实现一个文件的搜索功能,通过关键字搜索文件,凡是文件名或文件内容包括关键字的文件都需要找出来。还可以根据中文词语进行查询,并且需要支持多个条件查询。本案例中的原始内容就是磁盘上的文件,如下图:使用indexwriter对象创建索引创建索引1.实现步骤第一步:创建一个java工程,并导入jar包。第二步:创建一个indexwriter对象。1)指定索引库的存放位置Direct...原创 2019-05-09 19:51:42 · 338 阅读 · 0 评论 -
03Lucene配置开发环境
Lucene下载Lucene是开发全文检索功能的工具包,从官方网站下载Lucene4.10.3,并解压。官方网站:http://lucene.apache.org/版本:lucene4.10.3Jdk要求:1.7以上IDE:Eclipse使用的jar包Lucene包:lucene-core-4.10.3.jarlucene-analyzers-common-4.10.3.ja...原创 2019-05-09 17:23:20 · 406 阅读 · 0 评论 -
02Lucene实现全文检索的流程
索引和搜索流程图1、绿色表示索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括:确定原始内容即要搜索的内容 ->采集文档->创建文档->分析文档->索引文档2、红色表示搜索过程,从索引库中搜索内容,搜索过程包括:用户通过搜索界面->创建查询->执行搜索,从索引库搜索->渲染搜索结果创建索引对文档索引的过程,将用户要搜索的文档内容...原创 2019-05-09 17:03:19 · 306 阅读 · 0 评论 -
01全文检索技术介绍
数据分类我们生活中的数据总体分为两种:结构化数据和非结构化数据。结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据: 指不定长或无固定格式的数据,如邮件,word文档等磁盘上的文件结构化数据搜索常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现,通常都是使用sql语句进行查询,而且能很快的得到查询结果。为什么数据库搜索很容易? 因为数据库中的数...原创 2019-05-09 15:34:28 · 456 阅读 · 0 评论