
搜索引擎
qq_26676207
这个作者很懒,什么都没留下…
展开
-
Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词
一、Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer2. 在pom.xml里面引入如下依赖 <!-- lucene 核心模块 --> <dependency> <groupId&g...转载 2018-07-16 10:36:21 · 360 阅读 · 0 评论 -
elasticsearch系列八:ES 集群管理(集群规划、集群搭建、集群管理)
一、集群规划搭建一个集群我们需要考虑如下几个问题:1. 我们需要多大规模的集群?2. 集群中的节点角色如何分配?3. 如何避免脑裂问题?4. 索引应该设置多少个分片?5. 分片应该设置几个副本?下面我们就来分析和回答这几个问题1、我们需要多大规模的集群?需要从以下两个方面考虑:1.1 当前的数据量有多大?数据增长情况如何?1.2 你的机器配置如何?cpu、多大内存、多大硬盘容量?推算的依据:ES ...转载 2018-07-12 17:38:08 · 1043 阅读 · 0 评论 -
elasticsearch系列一:elasticsearch(ES简介、安装&配置、集成Ikanalyzer)
一、ES简介1. ES是什么?Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。Elasticsearch 不仅仅只是一个全文搜索引擎。 它可以被下面这样...转载 2018-07-13 09:46:16 · 6916 阅读 · 1 评论 -
Solr系列一:Solr(Solr介绍、Solr应用架构、Solr安装使用)
一、前言 前面已经学习了Lucene的分词、索引详解、搜索详解的知识,已经知道开发一个搜索引擎的流程了。现在就会有这样的一个问题:如果其他的系统也需要使用开发的搜索引擎怎么办呢?这个时候就需要把开发的搜索引擎封装成一个组件或者独立成一个单独的服务给其他系统使用了。目前市面上已经有基于Lucene的成熟的稳定的搜索引擎服务,例如Solr和ElasticSearch,如果没有特殊需求我们就可以直接拿...转载 2018-07-13 09:56:27 · 3928 阅读 · 0 评论 -
Solr系列二:solr-部署详解(solr两种部署模式介绍、独立服务器模式详解、SolrCloud分布式集群模式详解)
一、solr两种部署模式介绍Standalone Server 独立服务器模式:适用于数据规模不大的场景SolrCloud 分布式集群模式:适用于数据规模大,高可靠、高可用、高并发的场景二、独立服务器模式详解1. 独立服务器模式架构说明:1、每个solr服务器实例(启动的一个solr服务器进程)都有一个solr主目录(系统变量名为:solr.solr.home)。启动服务器实例时须为实例指定主目...转载 2018-07-13 09:58:07 · 581 阅读 · 0 评论 -
Solr系列三:solr索引详解(Schema介绍、字段定义详解、Schema API 介绍)
一、Schema介绍1. Schema 是什么?Schema:模式,是集合/内核中字段的定义,让solr知道集合/内核包含哪些字段、字段的数据类型、字段该索引存储。2. Schema 的定义方式Solr中提供了两种方式来配置schema,两者只能选其一2.1 默认方式,通过Schema API 来实时配置,模式信息存储在内核目录的conf/managed-schema文件中。2.2 传统的手工编辑...转载 2018-07-13 10:05:20 · 2605 阅读 · 0 评论 -
Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)
一、SolrJ介绍1. SolrJ是什么?Solr提供的用于JAVA应用中访问solr服务API的客户端jar。在我们的应用中引入solrj:<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <versi...转载 2018-07-13 10:14:54 · 1796 阅读 · 0 评论 -
Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)
一、solr搜索流程介绍1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下流程说明:首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query,使用所有搜索器IndexSearcher执行查询对象Query得到TopDocs,遍历TopDocs得到文档Document2. Solr搜索的工作流程:流程说明:用户输入查询字符串,根据用户的请求类型q...转载 2018-07-13 10:16:49 · 603 阅读 · 0 评论 -
Solr系列六:solr搜索详解优化查询结果(分面搜索、搜索结果高亮、查询建议、折叠展开结果、结果分组、其他搜索特性介绍)
一、分面搜索1. 什么是分面搜索?分面搜索:在搜索结果的基础上进行按指定维度的统计,以展示搜索结果的另一面信息。类似于SQL语句的group by分面搜索的示例:http://localhost:8983/solr/techproducts/browse 2. Solr中支持的分面查询 字段分面、区间分面、决策树分面、查询分面 2.1 字段分面执行搜索时,根据查询请求返回特定分面字段中找到的唯一...转载 2018-07-13 10:18:48 · 851 阅读 · 0 评论 -
Lucene系列五:Lucene索引详解(IndexWriter详解、Document详解、索引更新)
一、IndexWriter详解问题1:索引创建过程完成什么事? 分词、存储到反向索引中1. 回顾Lucene架构图:介绍我们编写的应用程序要完成数据的收集,再将数据以document的形式用lucene的索引API创建索引、存储。 这里重点要强调应用代码负责做什么,lucene负责做什么。2. Lucene索引创建API 图示 通过该图介绍lucene创建索引的核心API:Documen...转载 2018-07-13 10:23:09 · 537 阅读 · 0 评论 -
elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spri
一、ES Client 简介1. ES是一个服务,采用C/S结构 2. 回顾 ES的架构 3. ES支持的客户端连接方式3.1 REST API ,端口 9200 这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式进行连接3.2 Transport 连接 端口 9300 这种连接方式对应于架构图中的Tra...转载 2018-07-12 17:34:07 · 17935 阅读 · 1 评论 -
elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)
一、聚合分析简介 1. ES聚合分析是什么?聚合分析是数据库中重要的功能特性,完成对一个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最大值、最小值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强大的聚合分析能力。对一个数据集求最大、最小、和、平均值等指标的聚合,在ES中称为指标聚合 metric而关系型数据库中除了有聚合函数外,还可以对查询出的数据进行分组gr...转载 2018-07-12 17:32:43 · 3000 阅读 · 0 评论 -
elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)
一、查询建议介绍 1. 查询建议是什么?查询建议,为用户提供良好的使用体验。主要包括: 拼写检查; 自动建议查询词(自动补全) 拼写检查如图:自动建议查询词(自动补全): 2. ES中查询建议的API 查询建议也是使用_search端点地址。在DSL中suggest节点来定义需要的建议查询 示例1:定义单个建议查询词POST twitter/_search{ "query" : { ...转载 2018-07-12 17:23:36 · 6383 阅读 · 1 评论 -
Lucene系列三:Lucene分词器详解、实现自己的一个分词器
一、Lucene分词器详解1. Lucene-分词器API(1)org.apache.lucene.analysi.Analyzer分析器,分词器组件的核心API,它的职责:构建真正对文本进行分词处理的TokenStream(分词处理器)。通过调用它的如下两个方法,得到输入文本的分词处理器。public final TokenStream tokenStream(String fieldName,...转载 2018-07-16 10:39:24 · 960 阅读 · 0 评论 -
Lucene系列二:Lucene(Lucene介绍、Lucene架构、Lucene集成)
一、Lucene介绍1. Lucene简介 最受欢迎的java开源全文搜索引擎开发工具包。提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。是Apache的子项目,网址:http://lucene.apache.org/2. Luce...转载 2018-07-16 10:40:52 · 2747 阅读 · 0 评论 -
Lucene系列一:搜索引擎核心理论
一、为什么需要搜索引擎问题1:数据库索引的原理是怎样的? 索引原理:对列值创建排序存储,数据结构={列值、行地址}。在有序数据列表中就可以利用二分查找快速找到要查找的行的地址,再根据地址直接取行数据。问题2:索引的排序,是怎么排的? 数值列 时间列 文本列问题3:在新闻标题列上建索引,当我们查询 标题 = ‘钓鱼岛’,数据库会怎么去查? 而当我们查询 标题 LIKE ‘%钓鱼岛%’ ,数据...转载 2018-07-16 10:41:34 · 1629 阅读 · 0 评论 -
多线程系列八:线程安全、Java内存模型(JMM)、底层实现原理
一、线程安全1. 怎样让多线程下的类安全起来无状态、加锁、让类不可变、栈封闭、安全的发布对象2. 死锁2.1 死锁概念及解决死锁的原则一定发生在多个线程争夺多个资源里的情况下,发生的原因是每个线程拿到了某个(某些)资源不释放,同时等待着其他线程所持有的资源。解决死锁的原则就是确保正确的获取资源的顺序,或者获取资源时使用定时尝试机制。2.2 常见的死锁:简单顺序死锁:package com.stu...转载 2018-07-16 10:45:47 · 200 阅读 · 0 评论 -
多线程系列七:记录一次学习项目性能优化的过程及心得
一、项目背景和问题有一个自适应的考试学习系统,对学员的学习要求经常考试进行检查,学员的成绩出来以后,老师会要求系统根据每个学员的考卷上错误的题目从容量为10万左右的题库中抽取题目,为每个学员生成一套各自个性化的考后复习和练习的离线练习册。所以,每次考完试,特别是比较大型的考试后,要求生成的离线文档数量是比较多的,一个考试2000多人,就要求生成2000多份文档。问题是离线文档生成的速度非常...转载 2018-07-16 10:47:19 · 191 阅读 · 0 评论 -
elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)
一、快速入门1. 查看集群的健康状况http://localhost:9200/_cathttp://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状态值说明Green - everything is good (cluster is fully functional),即最佳状态Yellow - all data is available but ...转载 2018-07-12 16:44:26 · 943 阅读 · 0 评论 -
elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
一、分词器1. 认识分词器 1.1 Analyzer 分析器 在ES中一个Analyzer 由下面三种组件组合而成:character filter :字符过滤器,对文本进行字符过滤处理,如处理文本中的html标签字符。处理完后再交给tokenizer进行分词。一个analyzer中可包含0个或多个字符过滤器,多个按配置顺序依次进行处理。tokenizer:分词器,对文本进行分词。一个anal...转载 2018-07-12 16:51:08 · 2736 阅读 · 0 评论 -
elasticsearch系列四:搜索详解(搜索API、Query DSL)
一、搜索API 1. 搜索API 端点地址从索引tweet里面搜索字段user为kimchy的记录GET /twitter/_search?q=user:kimchy从索引tweet,user里面搜索字段user为kimchy的记录GET /twitter/tweet,user/_search?q=user:kimchyGET /kimchy,elasticsearch/_search?q=tag...转载 2018-07-12 17:01:03 · 2339 阅读 · 0 评论 -
Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)
一、搜索流程详解1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字、对关键字进行分词、根据分词结果去索引库里面找到对应的文章id、根据文章id找到对应的文章2. Lucene搜索API 图示 3. Lucene搜索代码示例 先在pom.xml里面引入查询分析器模块<!-- lucene-queryparser 查询分析器模块 --> ...转载 2018-07-13 10:24:20 · 586 阅读 · 0 评论