澳门美高梅手机网站Solr 教程

—恢复内容开始—

http://www.jasongj.com/2015/03/10/KafkaColumn1/

 发表于 2015-03-10 |  更新于 2017-03-29 |  分类于 Kafka , big
data , 大数据 , 分布式 |  评说次数 48 | 阅读次数 47729 |  字数 7,364

正文介绍了Kafka的创办背景,设计目标,使用信息网的优势以及时风行的消息网相比。并介绍了Kafka的架构,Producer消息路由,Consumer
Group以及由于其落实的差消息分发方式,Topic & Partition,最后介绍了Kafka
Consumer为何使用pull模式和Kafka提供的老三种delivery guarantee。

原创文章,转载请务必将下面这段话置于文章开头处。(已授权InfoQ中文站发布)
正文转发自技能世界,初稿链接 http://www.jasongj.com/2015/03/10/KafkaColumn1

1.Solr概述

摘要

  Kafka是出于LinkedIn开发并开源之分布式消息网,因其分布式及高吞吐率而给大规模应用,现就同Cloudera
Hadoop,Apache Storm,Apache
Spark集成。本文介绍了Kafka的创造背景,设计目标,使用信息网的优势和当前风行的音网相比。并介绍了Kafka的架,Producer消息路由,Consumer
Group以及由于该落实之异消息分发方式,Topic & Partition,最后介绍了Kafka
Consumer为何使用pull模式与Kafka提供的老三种植delivery guarantee。

事先瞧官网的牵线

背景介绍

Solr is the popular, blazing-fast, open source enterprise search
platform built on Apache Lucene™.

Kafka创建背景

  Kafka是一个消息网,原本开发自LinkedIn,用作LinkedIn的位移流(Activity
Stream)和运营数据处理管道(Pipeline)的底蕴。现在她就受多家不同类别的柜 作为多种类型的数据管道与信息网采用。
  活动流数据是几拥有站点在针对其网站采取状态举行报表时还使就此到的数量中最健康的片。活动数量包括页面访问量(Page
View)、被翻内容方面的音讯以及查找情况等情节。这种数据一般的处理方式是先期将各种运动因为日记的样式写入某种文件,然后周期性地对这些文件进行统计分析。运营数量因的凡服务器的习性数据(CPU、IO使用率、请求时、服务日志等等数据)。运营数据的统计方法种类层出不穷。
  近年来,活动和营业数量处理都改成了网站软件出品特点中一个重要的一些,这就用同套小更错综复杂的根底设备对该提供支持。
  

好望它们是基于Lucene的搜寻平台,一些寻找效果我们且可经过其来贯彻。

Kafka简介

  Kafka是一律种植分布式的,基于发布/订阅的音网。主要设计目标如下:

  • 以时复杂度为O(1)的办法供信息持久化能力,即使对TB级以上数据为克保证常数时间复杂度的拜访性能
  • 高吞吐率。即使在生廉价的商用机器上吧会成就单机支持各秒100K条以上信息的传
  • 支持Kafka
    Server间的音讯分区,及分布式消费,同时确保每个Partition内之信顺序传输
  • 而支持离线数据处理同实时数据处理
  • Scale out:支持在线水平扩展

 

为何采用信息网

  • 解耦
      以类型启动的新来预测未来色会遇到什么要求,是极致困难的。消息网在处理过程中间插了一个分包的、基于数的接口层,两边的处理过程都使贯彻即时同接口。这允许你独自的扩展或改动两度的处理过程,只要确保其遵守同样的接口约束。

  • 冗余
      有些情况下,处理数据的进程会破产。除非数码让持久化,否则用促成丢失。消息队列把数据开展持久化直到其都深受全处理,通过就同方法逃避了数丢失风险。许多消息队列所采用的”插入-获取-删除”范式中,在拿一个信从队列中去之前,需要而的处理体系明确的指出该消息已经被处理完毕,从而确保您的数据被安康的保存直到你以完毕。

  • 扩展性
      因为消息队列解耦了你的处理过程,所以增大消息入队和处理的效率是殊爱的,只要另外多处理过程即可。不待改代码、不需要调剂参数。扩展就像调整大电力按钮一样简单。

  • 圆滑 & 峰值处理能力
      于访问量剧增的情形下,应用还要后续发挥作用,但是如此的突发流量并无广泛;如果也因能处理及时类似峰值访问为规范来投入资源随时待命的是伟的浪费。使用信息队列会使重点零部件顶住突发的看压力,而不见面因为突发的过度的请而完全崩溃。

  • 然恢复性
      系统的等同有零件失效时,不见面影响到全体体系。消息队列降低了经过之中的耦合度,所以就是一个处理消息之长河挂掉,加入队列中的信依然可以在系恢复后受处理。

  • 依次保证
      以多使用状况下,数据处理的一一都充分要紧。大部分消息队列本来就排序的,并且会保证数据会照一定的依次来拍卖。Kafka保证一个Partition内之音讯之有序性。

  • 缓冲
      以另要之系遭到,都见面有得不同的处理时之素。例如,加载一摆设图纸于使用过滤器花费还少之时。消息队列通过一个缓冲层来帮任务最高效率的行———写副行的处理会尽可能的快。该缓冲有助于控制与优化数据流经过系统的快。

  • 异步通信
      很多辰光,用户不思吧无欲立即处理消息。消息队列提供了异步处理体制,允许用户把一个音放入队列,但并无立处理它。想为行中放入小消息就推广小,然后在得的时刻又夺处理它们。

2.Solr原理与核心概念

常用Message Queue对比

  • RabbitMQ
      RabbitMQ是运用Erlang编写的一个开源之音讯队列,本身支持广大底协商:AMQP,XMPP,
    SMTP,
    STOMP,也正因如此,它非常重量级,更可吃公司级的付出。同时落实了Broker构架,这代表消息于殡葬给客户端时先在着力队列排队。对路由,负载均衡或者数持久化都有大好之支撑。

  • Redis
      Redis是一个基于Key-Value对的NoSQL数据库,开发保护非常活跃。虽然它们是一个Key-Value数据库存储系统,但它自己支持MQ功能,所以全好用作一个轻量级的排服务来行使。对于RabbitMQ和Redis的入队同出队操作,各执行100万不好,每10万不好记录同一不良执行时。测试数据分为128Bytes、512Bytes、1K暨10K季独不同尺寸的数据。实验表明:入队时,当数较小时Redis的属性要高于RabbitMQ,而使数量大小超过了10K,Redis则慢的无法忍受;出队时,无论数额大小,Redis都展现有大好的性质,而RabbitMQ的出队性能则多小于Redis。

  • ZeroMQ
      ZeroMQ号称太抢的信队列系统,尤其对大吞吐量的急需状况。ZMQ能够实现RabbitMQ不善于的高级/复杂的行,但是开发人员需要团结成又技框架,技术达到之复杂度是针对性就MQ能够使成之挑战。ZeroMQ具有一个异的非中间件的模式,你莫待设置以及运转一个信服务器或中件,因为你的应用程序将装这个服务器角色。你独自待简单的援ZeroMQ程序库,可以使用NuGet安装,然后您就算好喜的于应用程序之间发送信息了。但是ZeroMQ仅提供非持久性的序列,也就是说要宕机,数据以见面丢掉。其中,Twitter的Storm
    0.9.0先的本子中默认使用ZeroMQ作为数据流的导(Storm从0.9版开始以支持ZeroMQ和Netty作为传输模块)。

  • ActiveMQ
      ActiveMQ是Apache下的一个子项目。
    类似于ZeroMQ,它亦可为代表和沾对碰之技术实现队列。同时类似于RabbitMQ,它少量代码就足以迅速地促成高级应用场景。

  • Kafka/Jafka
      Kafka是Apache下的一个子项目,是一个赛性能跨语言分布式发布/订阅消息队列系统,而Jafka是于Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特征:快速持久化,可以在O(1)的系出下进展信息持久化;高吞吐,在同样台一般的服务器上既可齐10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;支持Hadoop数据交互加载,对于诸如Hadoop的相同的日志数据与离线分析体系,但还要要求实时处理的限定,这是一个灵光之解决方案。Kafka通过Hadoop的相互加载机制统一了在线与离线的音处理。Apache
    Kafka相对于ActiveMQ是一个充分轻量级的音讯网,除了性能大好外,还是一个做事良好的分布式系统。

Solr的原理非常简单,对于用户之输入文件随要求建立不同的目录,需要多少经常就冲目录来搜寻,所以solr的中坚就是索引的创造。

Kafka架构

纵使好比同样本空的活页书,现在各国来同样布置菜单(输入文件)你尽管记下下她的用料如番茄(这就算是咱要之索引类型)并将其进入书被,最后出成千上百页的菜系了。此时你想搜寻那些菜谱用到了番茄,我们就径直到刚记录的公文中错过探寻它的页号而不用失去同页一页翻了。

Terminology

  • Broker
      Kafka集群包含一个还是多个服务器,这种服务器被名broker
  • Topic
      每条发表暨Kafka集群的信息都产生一个型,这个类别为称呼Topic。(物理及差Topic的音信分开储存,逻辑上一个Topic的音讯则保存于一个还是多单broker上可用户仅待点名消息之Topic即可生或花数量要无需关心数据存于何处)
  • Partition
      Parition是情理上的定义,每个Topic包含一个还是多独Partition.
  • Producer
      负责发布信息及Kafka broker
  • Consumer
      音消费者,向Kafka broker读取信息的客户端。
  • Consumer Group
      每个Consumer属于一个特定的Consumer
    Group(可也每个Consumer指定group name,若未点名group
    name则属于默认的group)。

 

Kafka拓扑结构

澳门美高梅手机网站 1
  如达到图所示,一个天下无双的Kafka集众多中涵盖多Producer(可以是web前端起的Page
View,或者是服务器日志,系统CPU、Memory等),若干broker(Kafka支持水平扩展,一般broker数量越多,集群吞吐率越强),若干Consumer
Group,以及一个Zookeeper集群。Kafka通过Zookeeper管理集群配置,选举leader,以及当Consumer
Group发生变化时开展rebalance。Producer使用push模式将信息披露到broker,Consumer用pull模式从broker订阅并花信息。
  

脚是Solr中之中心概念

Topic & Partition

  Topic在逻辑上足吃看是一个queue,每条消费都不能不指定它的Topic,可以简单了解啊必须指明把当时长达信息放上哪个queue里。为了教Kafka的吞吐率可以线性提高,物理及把Topic分成一个或者多单Partition,每个Partition在物理及相应一个文本夹,该公文夹下存储这个Partition的富有信息及目录文件。若创建topic1和topic2少单topic,且分别发生13只同19只分区,则全集群达会见相应会生成共32个公文夹(本文所用集群共8单节点,此处topic1和topic2
replication-factor均为1),如下图所著。
  澳门美高梅手机网站 2
  
  每个日志文件还是一个log entry序列,每个log entry含一个4字节整型数值(值为N+5),1单字节的”magic
value”,4单字节的CRC校验码,其后跟N个字节的消息体。每条消息还起一个当下Partition下唯一的64字节的offset,它指明了就条信息之苗头位置。磁盘上囤积的消息格式如下:
  message length : 4 bytes (value: 1+4+n)
  “magic” value : 1 byte
  crc : 4 bytes
  payload : n bytes
  这个log entry甭由一个文本构成,而是分成多独segment,每个segment以该segment第一条信息之offset命名并为“.kafka”为后缀。另外会有一个目录文件,它标志了每个segment下富含的log entry的offset范围,如下图所显示。
  澳门美高梅手机网站 3
  
  因为各级条信息都为append到该Partition中,属于顺序写磁盘,因此效率很大(经验证,顺序写磁盘效率比自由写内存还要大,这是Kafka高吞吐率的一个很要紧的承保)。
  澳门美高梅手机网站 4
  
  对于人情的message
queue而言,一般会去除已经让消费的消息,而Kafka集群会保留所有的信息,无论该受消费呢。当然,因为磁盘限制,不可能永远保存所有数据(实际上为从不必要),因此Kafka提供零星种政策删除旧数据。一是因时间,二凡是冲Partition文件大小。例如可以由此配备$KAFKA_HOME/config/server.properties,让Kafka删除一宏观前的数量,也只是于Partition文件超过1GB时去旧数据,配置如下所示。

1
2
3
4
5
6
7
8
# The minimum age of a log file to be eligible for deletion
log.retention.hours=168
# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=1073741824
# The interval at which log segments are checked to see if they can be deleted according to the retention policies
log.retention.check.interval.ms=300000
# If log.cleaner.enable=true is set the cleaner will be enabled and individual logs can then be marked for log compaction.
log.cleaner.enable=false

 

  这里要专注,因为Kafka读博特定消息的年月复杂度为O(1),即同文件大小无关,所以这边去过期文件及提高Kafka性能无关。选择如何的勾策略才跟磁盘以及现实的需有关。另外,Kafka会为各级一个Consumer
Group保留部分metadata信息——当前费的音讯之position,也尽管offset。这个offset由Consumer控制。正常情况下Consumer会在花费完毕一长信息继递增该offset。当然,Consumer也不过将offset设成一个于小的价值,重新消费有消息。因为offet由Consumer控制,所以Kafka
broker是不管状态的,它不欲标记哪些信息给哪些消费了,也不需要经过broker去保证与一个Consumer
Group只生一个Consumer能消费之一平等长消息,因此为就算未待锁机制,这也为Kafka的强吞吐率提供了精保障。
  

  • Document:每个被索引的用户输入文件
  • Field:索引的路
  • Solr schema:描述solr如何创造索引以及如何查询索引

Producer消息路由

  Producer发送消息及broker时,会根据Paritition机制选用该储存到哪一个Partition。如果Partition机制设置合理,所有信息可以均匀分布至不同的Partition里,这样虽落实了负荷均衡。如果一个Topic对许一个文书,那这文件所在的机器I/O将会成是Topic的属性瓶颈,而生矣Partition后,不同的信可以互相写副不同broker的两样Partition里,极大的提高了吞吐率。可以当$KAFKA_HOME/config/server.properties蒙经过配备起num.partitions来指定新建Topic的默认Partition数量,也不过当创立Topic时经参数指定,同时也可以在Topic创建之后通过Kafka提供的家伙修改。
  
  在发送一长长的消息不时,可以指定这条信息之key,Producer根据此key和Partition机制来判断该将马上长长的信息发送至谁Parition。Paritition机制好通过点名Producer的paritition. class立即无异参数来指定,该class必须兑现kafka.producer.Partitioner接口。本例中使key可以被分析为整数则拿相应之平头与Partition总数取余,该信息会吃发送到该数对应的Partition。(每个Parition都见面发生个序号,序号从0开始)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import kafka.producer.Partitioner;
import kafka.utils.VerifiableProperties;
 
public class JasonPartitioner<T> implements Partitioner {
 
public JasonPartitioner(VerifiableProperties verifiableProperties) {}
 
@Override
public int partition(Object key, int numPartitions) {
try {
int partitionNum = Integer.parseInt((String) key);
return Math.abs(Integer.parseInt((String) key) % numPartitions);
} catch (Exception e) {
return Math.abs(key.hashCode() % numPartitions);
}
}
}

 

  如果将直达例被的接近作为partition.class,并由此如下代码发送20长长的信息(key分别吗0,1,2,3)至topic3(包含4单Partition)。
  

1
2
3
4
5
6
7
8
9
10
public void sendMessage() throws InterruptedException{
  for(int i = 1; i <= 5; i++){
   List messageList = new ArrayList<KeyedMessage<String, String>>();
   for(int j = 0; j < 4; j++){
   messageList.add(new KeyedMessage<String, String>("topic2", String.valueOf(j), String.format("The %d message for key %d", i, j));
   }
   producer.send(messageList);
}
  producer.close();
}

 

  则key相同之信息会被发送并储存到和一个partition里,而且key的序号正好和Partition序号相同。(Partition序号从0开始,本例中之key也从0开始)。下图所示是由此Java程序调用Consumer后打印出的信息列表。
  澳门美高梅手机网站 5  

 

Consumer Group

  (本节怀有描述都是基于Consumer hight level API而非low level
API)。
  使用Consumer high level
API时,同一Topic的一样久消息只能为与一个Consumer
Group内的一个Consumer消费,但差不多单Consumer Group可同时花费就无异信息。
  澳门美高梅手机网站 6
  这是Kafka用来贯彻一个Topic消息之播放(发给具有的Consumer)和单播(发给某一个Consumer)的伎俩。一个Topic可以针对许多单Consumer
Group。如果要贯彻播放,只要每个Consumer有一个独立的Group就得了。要落实单播只要持有的Consumer在和一个Group里。用Consumer
Group还可以用Consumer进行随机之分组而非欲频繁殡葬信息及不同之Topic。
  实际上,Kafka的设计意见之一就是是同时提供离线处理及实时处理。根据当时同样特性,可以利用Storm这种实时流处理体系对信息进行实时在线处理,同时采用Hadoop这种批判处理系统开展离线处理,还得同时以数据实时备份到外一个多少核心,只待确保这三单操作所采取的Consumer属于不同之Consumer
Group即可。下图是Kafka在Linkedin的同等种简化部署示意图。
  澳门美高梅手机网站 7
  
  下面这事例更清晰地展示了Kafka Consumer
Group的特点。首先创建一个Topic
(名吧topic1,包含3个Partition),然后创建一个属group1的Consumer实例,并创办三单属于group2的Consumer实例,最后通过Producer向topic1殡葬key分别吗1,2,3之音。结果发现属于group1的Consumer收到了独具的立刻三长达信息,同时group2中之3只Consumer分别接受了key为1,2,3的信息。如下图所示。
  澳门美高梅手机网站 8  

3.Solr目录结构

Push vs. Pull  

  作为一个消息网,Kafka遵循了人情的艺术,选择由Producer向broker
push音并出于Consumer从broker pull消息。一些logging-centric
system,比如Facebook的Scribe和Cloudera的Flume,采用push模式。事实上,push模式及pull模式各起高低。
  push模式很为难适应消费速率不同之主顾,因为消息发送速率是由broker决定的。push模式之靶子是硬着头皮为极抢速度传递消息,但是这样充分轻招Consumer来不及处理消息,典型的表现就是是拒绝服务以及台网不通。而pull模式则足以依据Consumer的费能力为适当的速率消费信息。
  对于Kafka而言,pull模式再度方便。pull模式可简化broker的计划,Consumer可自主控制消费信息的速率,同时Consumer可以协调支配消费方式——即可批量费为不过依次消费,同时还能挑不同之付出方式因此实现不同的传导语义。
  

设置过程呈现https://lucene.apache.org/solr/guide/6\_6/installing-solr.html

Kafka delivery guarantee

  有这样几栽可能的delivery guarantee:

  • At most once 消息可能会见丢弃,但绝不会见再度传输
  • At least one 消息毫不会扔,但恐怕会见重新传输
  • Exactly once 每条信息一定会让传相同潮还只传输相同不好,很多时候就是用户所想如果的。
      
      当Producer向broker发送消息时,一旦这漫漫消息于commit,因数replication的是,它就是未见面弃。但是要Producer发送数据给broker后,遇到网络问题使导致通信中断,那Producer就无法看清该永信息是否已经commit。虽然Kafka无法确定网络故障期间产生了啊,但是Producer可以十分成一种类似于主键的东西,发生故障时幂等性的重试多次,这样就到位了Exactly once。截止到即(Kafka
    0.8.2本子,2015-03-04),这无异于Feature还未曾实现,有期待当Kafka未来之版中贯彻。(所以时默认情况下一致漫漫信息于Producer到broker是保险了At least once,可经过设置Producer异步发送实现At most once)。
      接下讨论的是信从broker到Consumer的delivery
    guarantee语义。(仅对Kafka consumer high level
    API)。Consumer于从broker读取信息继,可以选择commit,该操作会在Zookeeper中保留该Consumer在拖欠Partition中读取的信的offset。该Consumer下一致不行重复念该Partition时见面从生一样漫长开始读取。如无commit,下一致蹩脚读取的启幕位置会暨达到亦然次等commit之后的初始位置相同。当然好用Consumer设置为autocommit,即Consumer一旦读到数码及时自行commit。如果单独谈谈即同一诵读取消息的历程,那Kafka是保了Exactly once。但事实上用受到应用程序并非在Consumer读博了数据就终止了,而是只要拓展更为处理,而数据处理和commit的相继以挺十分程度达到主宰了音于broker和consumer的delivery
    guarantee semantic。
  • 宣读毕信息先commit再处理消息。这种模式下,如果Consumer在commit后还未曾来得及处理消息就crash了,下次更开工作后即无法读到刚已交付而不处理的消息,这即对应于At most once
  • 朗诵了信息先处理还commit。这种模式下,如果在拍卖了信息后commit之前Consumer
    crash了,下次重开始工作经常还会处理刚未commit的信息,实际上该消息都给拍卖过了。这虽本着应于At least once。在众多用状况下,消息还生一个主键,所以消息之拍卖往往有幂等性,即多次甩卖及时无异于久信息以及单纯处理同次等是平等的,那就好看是Exactly once。(笔者以为这种说法比较牵强,毕竟她不是Kafka本身提供的体制,主键本身为并无克一心保险操作的幂等性。而且实际我们说delivery
    guarantee
    语义是座谈让处理多少坏,而无处理结果怎样,因为处理方式多种多样,我们无应拿处理过程的性状——如是否幂等性,当成Kafka本身的Feature)
  • 如若一定要是成功Exactly once,就需协调offset和实际操作的出口。经典的做法是引入两等级提交。如果能够叫offset和操作输入有和一个地方,会重新简短与通用。这种方法可能更好,因为许多出口系统可能无支持有限路提交。比如,Consumer将到数量后恐怕把数量放到HDFS,如果管新型的offset和数量我并写及HDFS,那就是得保证数据的输出和offset的翻新要么都成功,要么都无到位,间接实现Exactly once。(目前尽管high
    level API而言,offset是存于Zookeeper中之,无法存于HDFS,而low level
    API的offset是由于友好失去维护的,可以将之存于HDFS中)
      总之,Kafka默认保证At least once,并且同意通过安装Producer异步提交来贯彻At most once。而Exactly once求以及表面存储系统合作,幸运的是Kafka提供的offset可以好直接非常容易得用这种措施。

  

澳门美高梅手机网站 9

Kafka系列文章

  • Kafka设计解析(一)-
    Kafka背景与架构介绍
  • Kafka设计解析(二)- Kafka High Availability
    (上)
  • Kafka设计解析(三)- Kafka High Availability
    (下)
  • Kafka设计解析(四)- Kafka
    Consumer设计解析
  • Kafka设计解析(五)-
    Kafka性能测试方法及Benchmark报告   
         

澳门美高梅手机网站 10

欢迎关注作者微信公众号【大数额架构】

下介绍几个基本点的目录

  •  bin目录不用多说一般存放的还是行文书,启动solr就是要进去这个目录下输入指令solr
    start 
  •  contrib/dist solr的核心jar包与扩大jar包
  •  example solr的简实例
  •  ext外部的jar包,后面我们如果用到之分词器,mysql驱动都是放于此地方便同一管理,此目录不是solr自带的
  •  server 重点,solr作为劳务启动之布置文件都存放于这里

 

 

 

 

4.Solr的之配备工作

下背景:实现类似知乎问题全文检索的功力。

数据库中的question表澳门美高梅手机网站 11(后面索引根据是字段来建立)

几乎单重要之配置文件

  • managed-file(D:\solr\solr-6.2.0\solr-6.2.0\server\solr\wenda\conf
    wenda时若的项目名称)  此文件管理solr如何创造索引及搜索索引
  • solrconfig  配置导入数据,添加jar包
  • solr-data-config.xml  配置数据源 

 上述三独文本都以 D:\solr\solr-6.2.0\solr-6.2.0\server\solr\wenda\conf下

 

 

俺们看同样看押Solr的行流程,然后再次同步一步看

1.managed-file

 <field name="question_content" type="text_ik" multiValued="true" indexed="true" stored="true"/>
 <field name="question_title" type="text_ik" multiValued="true" indexed="true" stored="true"/>

 name和type指定索引名称,字段类型

 

  <fieldType name="text_ik" class="solr.TextField">
  <!--索引时候的分词器-->  
    <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart="false"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  <!--查询时的分词器-->  
    <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart="true"/>
    </analyzer>
  </fieldType>

  

 再来看望字段类型text_ik是怎定义的,我看可以看出中定义了点滴单分词器。

 我们介绍一下啊是分开词器,英文其实特别好惩治按空格分就尽仍”Hello
World”分成Hello
和World就行,但汉语就死了,比如“今天天气很好“,使用英语的分词器就分为了一个一个
的单字体了。
所以我们设运用中文的分词器,这里用的便是IKTokenizer,可以于网上一直还编译打包(后面会讲话怎么编译打包)后放在solr的ext目录下D:\solr\solr-6.2.0\solr-
6.2.0\ext\ikanalyzer

此外filter指定过滤器,上面的过滤器表示用为此字母转换成为稍写,并且丢弃掉空格和非字母。

再多过滤器见 
 https://lucene.apache.org/solr/guide/6\_6/tokenizers.html\#Tokenizers-LetterTokenizer

末了useSmart属性指定了分词粒度的深浅,false表示再密切粒度的切分如下图

澳门美高梅手机网站 12

 

 2.solrconfig

添加必要之jar包,上面说到的分词器,mysql连接的jar包,solr导入数据的handler,配置handler

  <lib dir="${solr.install.dir:../../../..}/ext/ikanalyzer" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/ext/mysql" regex=".*\.jar" />
  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-\d.*\.jar" />
  ....
  ....
  ....

   <requestHandler name=”/dataimport”
class=”solr.DataImportHandler”>
     <lst name=”defaults”>
       <str name=”config”>solr-data-config.xml</str>
     </lst>
   </requestHandler>

 

小心到solr-data-config.xml,这个文件就用来配置数据源的公文,文件内容如下

<dataConfig>
    <dataSource type="JdbcDataSource" 
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/wenda?useSSL=false" 
              user="root" 
              password="521997"/>
    <document>
        <entity name="question"  query="select id,title,content from question">
            <field column="content" name="question_content"/>
            <field column="title" name="question_title"/>
        </entity>
    </document>
</dataConfig>

 

足见见咱们配备了mysql的数据源,documen就是一整个输入数据的集合里面还配置了列值与solr索引类型的附和关系

 

 

 

 

4.Solr的使用 API(Jsolr)编程及客户端UI使用

 澳门美高梅手机网站 13

 

 

 左侧选择而的门类,点击Dataimport,然后再次点击右侧下方的Execute,刚才配置的数据库内容就是自动导入进去了。

导入有半点栽形式full-import这个会去原来的索引索引并全部重新树立 
delta-import根据我们新增或修改的字段进行索引的修改,原来就solr记录以来一模一样不善导入时间,solr通过之时刻与数据库表中的timestamp列进行较,看那些数据是后补充加要改动的。

 

 

solrj编程详见https://lucene.apache.org/solr/guide/6\_6/using-solrj.html

此地自己说几碰得专注的

澳门美高梅手机网站 14

 

 h1表示高亮,q表示查询的字段

 这是摸索出的结果,结构是Map<String,Map<String,List>>

 

 

 6.Solr集群

  现实中我们常常吃多个机械及运行solr,构成Solr
Cloud,我们先了解一下着力的术语。

  • Collection 
    一个搜索索引(如上面的单机版solr,我们不怕创办了一个collection wenda)
  • Shard/Slice   单个Collection的逻辑部分
  • Replica 
    对Shard的大体表现形式,也是本着她的正片,一个Replica存在一个core中
  • LeaderReplia   与Replia形成基本机制
  • SolrCore/Core 封装了单个物理索引,多只core可以构成一个shard

一个collection由一个或者多单shard组成,一个shard包含一个或多独replia,一个replia是一个core

 

 澳门美高梅手机网站 15

 

 

 

 

 

—恢复内容了—

发表评论

电子邮件地址不会被公开。 必填项已用*标注