solr组件的角色都有哪些

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solr组件的角色都有哪些相关的知识,希望对你有一定的参考价值。

参考技术A Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。

二、Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于 HTTP 的

管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。

三、Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。

四、通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。

五、此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。
solr的优点
通过上面Solr的简介,可知solr的优点包括以下几个方面:

①高级的全文搜索功能;

②专为高通量的网络流量进行的优化;

③基于开放接口(XML和HTTP)的标准;

④综合的HTML管理界面;

⑤可伸缩性-能够有效地复制到另外一个Solr搜索服务器;

⑥使用XML配置达到灵活性和适配性;

⑦可扩展的插件体系。
solr VS Lucene!?
在比较solr和Lucene之前,要知道什么是Lucene,那么首先就来回顾Lucene是个什么东东?

Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta(雅加达) 家族中的一个开源项目。也是目前最为流行的基于Java开源全文检索工具包。目前已经有很多应用程序的搜索功能是基于 Lucene ,比如Eclipse 帮助系统的搜 索功能。Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。
那么,solr和它相比,是”输“了?还是“赢”了呢?

其实,Solr与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括 Solr: Solr是Lucene面向企业搜索应用的扩展。
下面是solr和 lucene的架构图: 

这个图很繁琐,看不懂,大家不要灰心,在后面的代码里你就能够了解了这个图所讲的。

不难看出,绿色的就是lucene的模块,而蓝色的就是solr扩展了lucene。从图上可以看出以下几点:

a. 一个真正的拥有动态字段(Dynamic Field)和唯一键(Unique Key)的数据模式(Data Schema) 
b. 对Lucene查询语言的强大扩展! 
c. 支持对结果进行动态的分组和过滤 
d. 高级的,可配置的文本分析 
e. 高度可配置和可扩展的缓存机制 
f. 性能优化 
g. 支持通过XML进行外部配置 
h. 拥有一个管理界面 
i. 可监控的日志 
j. 支持高速增量式更新(Fast incremental Updates)和快照发布(Snapshot Distribution)

说到这,solr的简介就到此结束了,相信大家也对solr有了初步的了解,下面开始介绍一下solr的常用属性有哪些?

solr的使用属性及配置文件
Document 包括一个或多个 Field。Field 包括名称、内容以及告诉 Solr 如何处理内容的元数据。

例如,Field可以包含字符串、数字、布尔值或者日期,也可以包含你想添加的任何类型,只需用在solr的配置文件中进行相应的配置即可。Field可以使用大量的选项来描述,这些

选项告诉 Solr 在索引和搜索期间如何处理内容。

现在,查看以下图片 中列出的重要属性的子集:

在这就先提一下solr的重要文件之一,就是schema.xml的配置文件。

(一) schema.xml

schema.xml这个配置文件可以在你下载solr包的安装解压目录的\solr\example\solr\collection1\conf中找到,它就是solr模式关联的文件。

打开这个配置文件,你会发现有详细的注释。模式组织主要分为三个重要配置:

一、Fieldtype

Fieldtype:就是属性类型的意思,像int,String,Boolean种类型,而在此配置文件中,FieldType就有这种定义属性的功能,看下面的图片: 

图片上有我们熟悉的int,String,boolean,那么,后面的配置,是什么呢?那么我们就来介绍一下后面的参数:

二、Field

Field:是添加到索引文件中出现的属性名称,而声明类型就需要用到上面的type,如图所示:

ps:①field: 固定的字段设置;②dynamicField: 动态的字段设置,用于后期自定义字段,*号通配符.例如: test_i就是int类型的动态字段。

还有一个特殊的字段copyField,一般用于检索时用的字段这样就只对这一个字段进行索引分词就行了copyField的dest字段如果有多个source一定要设置

android mvvm 角色分别都有哪些担任

MVVM的目标和思想MVP类似,利用数据绑定(Data Binding)、依赖属性(Dependency Property)、命令(Command)、路由事件(Routed Event)等新特性,打造了一个更加灵活高效的架构。

 

数据驱动
在MVVM中,以前开发模式中必须先处理业务数据,然后根据的数据变化,去获取UI的引用然后更新UI,通过也是通过UI来获取用户输入,而在MVVM中,数据和业务逻辑处于一个独立的View Model中,ViewModel只要关注数据和业务逻辑,不需要和UI或者控件打交道。由数据自动去驱动UI去自动更新UI,UI的改变又同时自动反馈到数据,数据成为主导因素,这样使得在业务逻辑处理只要关心数据,方便而且简单很多。

低耦合度
MVVM模式中,数据是独立于UI的,ViewModel只负责处理和提供数据,UI想怎么处理数据都由UI自己决定,ViewModel 不涉及任何和UI相关的事也不持有UI控件的引用,即使控件改变(TextView 换成 EditText)ViewModel 几乎不需要更改任何代码,专注自己的数据处理就可以了,如果是MVP遇到UI更改,就可能需要改变获取UI的方式,改变更新UI的接口,改变从UI上获取输入的代码,可能还需要更改访问UI对象的属性代码等等。

更新 UI
在MVVM中,我们可以在工作线程中直接修改View Model的数据(只要数据是线程安全的),剩下的数据绑定框架帮你搞定,很多事情都不需要你去关心。

团队协作
MVVM的分工是非常明显的,由于View和View Model之间是松散耦合的。一个是处理业务和数据,一个是专门的UI处理。完全有两个人分工来做,一个做UI(xml 和 Activity)一个写ViewModel,效率更高。

可复用性
一个View Model复用到多个View中,同样的一份数据,用不同的UI去做展示,对于版本迭代频繁的UI改动,只要更换View层就行,对于如果想在UI上的做AbTest 更是方便的多。

单元测试
View Model里面是数据和业务逻辑,View中关注的是UI,这样的做测试是很方便的,完全没有彼此的依赖,不管是UI的单元测试还是业务逻辑的单元测试,都是低耦合的。

参考技术A 说MVVM首先先提到标记语言,随着20世纪初web的崛起,HTML跟JS这样标记语言+程序语言的组合模式开始变得令人注目。逐渐推出的Flex、Sliverlight、QT、WPF、JSF、Cocoa等UI系统不约而同地选择了标记语言来描述界面。
在这样的架构中,view(或者说叫控件,不但是从依赖关系上跟程序的其他部件解耦,而且从语言上跟其它部分隔离开来)
然而这样的系统架构中,MVC和MVP模式已经不能很好地适用了。微软架构师John Gossman在WPF的XAML模式推出的同时,提出了MVVM的概念。

在安卓开发中,layout文件是静态的,只能通过代码进行修改,大量的事件绑定和finViewById以及视图的逻辑充斥在Activity中,使Acticity显得特别胖。
MVP虽然在一定程度上解决了Acticity代码量庞大,实现视图逻辑和视图操作的解耦,但是他们还是需要大量的代码对layout进行设置属性,比如说ImageView的setImageBitmap或者TextView的setText,显得特别啰嗦也很容易出错
但是而在安卓的Databinding中,把一个layout里面的控件的某些属性绑定对应的bean,把操作的控件看成bean对象,只需要对layout绑定的bean进行修改之后,layout就会随之改变。
这里的bean就是MVVM中的Model,那么对bean进行逻辑处理的就是VM(ViewModel),这样我们主需要关心M和VM之间的交互了。但是,还不能是实现双向绑定,比如说,对一个EditText的text属性绑定一个bean的属性,那么对EditText修改之后他的bean不会随之变化,当然可以自定义属性解决这个问题。
下面就是layout
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- 配置变量,name字段为下面想要引用的类,type为全类名,
AS中快捷键ctrl+shift+alt+c -->
<data>
<import type="com.znke.hellodatabinding.test1.Person"/>
<variable
name="person"
type="Person"/>
</data>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 需要填充的字段用@表示 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
android:text="@person.name"
/>
</LinearLayout>
</layout>1234567891011121314151617181920212223242512345678910111213141516171819202122232425

一个布局文件就是一个ViewBinding对象,它包含了这个布局里面所有View和变量:
ActivityRecyclerviewBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_recyclerview);
1212

注意,ActivityRecyclerviewBinding是系统自动生成的
然后看一下MVVM的示意图

MVVM是MVP的升级版,只是把presenter变成了ViewModel,并且MVVM支持绑定。

以上是关于solr组件的角色都有哪些的主要内容,如果未能解决你的问题,请参考以下文章

装饰器模式

Haror镜像仓库的几种角色都有哪些权限?

android mvvm 角色分别都有哪些担任

默认角色CONNECT 和RESOURCE角色具有哪些权限

游戏角色设计思路规划路径都有哪些?

solr必知必问问题