solr入门基础

1.什么是solr?

solr是基于lucene的全文检索服务器。

2.Solr是如何实现全文检索的呢?

全文检索大体分两个过程,索引创建(Indexing)搜索索引(Search)

 索引库:两部分组成:索引域,文档域(document)。

文档域:即我们存入的数据(但必须按照存在的Field属性存入属性。)

Field:  相当于属性名(相当于数据库字段名)

  • 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
  • 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。

FiledType:相当于分词器,用于分词

索引创建细节:

得到数据源,将数据源(document),经过分词器,将分出来的词放在索引库(这样用户可以通过某个词汇找到某个document:倒排索引),并且每个索引都存有指向document的指针,因此索引文件还具有document域。

搜索索引细节:

用户输入的语句,先经过分词解析器,分成一小段索引,然后去索引域中找,找出相应的document。

3. Solr和lucene的区别

lucene只是个全文检索工具包,是个jar包,不能独立运行,不能对外提供服务。

solr是个全文检索服务器,可以运行在web容器,可以单独对外提供服务。且比lucene更方便快捷.

4.Solr下载http://archive.apache.org/dist/lucene/solr/

 5.下载后的界面如下:

其中,这个example中有例子目录,这些是可以用来做模板的。

开发时在dist目录中,找到solr的war包,这个可以直接放到tomcat上。

解压war包后,还需要导入solr的服务扩展包到WEB-INF的lib目录下。(在example中lib里)

第五步:添加log4j.properties,复制到该目录下

第六步:在web.xml中指定solrhome的目录

什么是solrhome?

Solrhome是solr服务运行的主目录,一个solrhome目录里面包含多个solrcore目录,一个solrcore目录里面了一个solr实例运行时所需要的配置文件和数据文件。

每一个solrcore都可以单独对外提供搜索和索引服务。

多个solrcore之间没有关系。

Solrcore和solrhome的目录结构?前面说了在example中,有样例,直接复制就好了

复制到一个新的solrhome就OK了。

注意,还需要把复制这个两个文件夹(里面有jar包)复制到和solrhome同级目录下。

这两个文件对solrcore有影响,在solrcore中的solrconfig配置文件中需要改动

改动如下:solr.install.dir 表示solrcore的安装目录。所以需要改成返回上级两次目录(原本是三次)

这些lib标签就是用来导入包的。

solrconfig还有两个标签需要知道:

OK,介绍完启动。

界面如下:

上面只配了一个collectin1,可以配多个,复制就好了,但是需要改变名字,修改solrcore目录下的core.properties

这样就配置了多个solrcore.

大概就这么多。

那么怎么用solr呢?

    1. Schema.xml

在schema.xml文件中,主要配置了solrcore的一些数据信息,包括Field和FieldType的定义等信息,在solr中Field和FieldType都需要先定义后使用

      1. Filed

定义Field域

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

 

Name:指定域的名称

Type:指定域的类型

Indexed:是否索引

Stored:是否存储

Required:是否必须

multiValued:是否多值,比如商品信息中,一个商品有多张图片,一个Field像存储多个值的话,必须将multiValued设置为true。

 

      1. dynamicField

动态域

<dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>

 

Name:指定动态域的命名规则

 

      1. uniqueKey

指定唯一键

 

<uniqueKey>id</uniqueKey>

 

其中的id是在Field标签中已经定义好的域名,而且该域要设置为required为true。

 

一个schema.xml文件中必须有且仅有一个唯一键

      1. copyField

复制域

 

<copyField source="cat" dest="text"/>

 

Source:要复制的源域的域名

Dest:目标域的域名

 

由dest指的的目标域,必须设置multiValued为true。

 

为什么要copyFiled呢?有些时候需要查询多个域,如果我们合在一起了,一起就可以查出来.

      1. FieldType

定义域的类型

 

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">

      <analyzer type="index">

        <tokenizer class="solr.StandardTokenizerFactory"/>

        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

        <!-- in this example, we will only use synonyms at query time

        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>

        -->

        <filter class="solr.LowerCaseFilterFactory"/>

      </analyzer>

      <analyzer type="query">

        <tokenizer class="solr.StandardTokenizerFactory"/>

        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />

        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>

        <filter class="solr.LowerCaseFilterFactory"/>

      </analyzer>

    </fieldType>

Name:指定域类型的名称

Class:指定该域类型对应的solr的类型

Analyzer:指定分析器

Type:index、query,分别指定搜索和索引时的分析器

Tokenizer:指定分词器

Filter:指定过滤器

那我们需要分词中文怎么办?

    1. 中文分词器

使用ikanalyzer进行中文分词

第一步:将ikanalyzer的jar包拷贝到以下目录

第二步:将ikanalyzer的扩展词库的配置文件拷贝到 目录

 

 

第三步:配置FieldType

 

第四步:配置使用中文分词的Field

之后重启,就可以使用我们新添加的field进行中文分词了(在哪analysis中有选择)

可是这个怎么运用到我们定义的数据库中呢?

把需要的数据库中需要建立索引分词的表建立fied就行。

比如:product表

这里因为一个一个schema.xml文件中必须有且仅有一个唯一键,这个schema.xml本身就有有个id键,这里不需要添加。

(那怎么没看到id和pid的映射?后面可以知道,现在这里不用配)

配置完后,就是从数据库导入数据到solr中了

还记得前面说的Dataimport,用来导入数据到solr中。

一:导入Dataimport的jar包

修改solrconfig.xml文件,添加lib标签

<lib dir="${solr.install.dir:../..}/contrib/dataimporthandler/lib" regex=".*\.jar" />

  1. MySQL数据库驱动包

将mysql的驱动包,复制到以下目录(db需要自己建)

修改solrconfig.xml文件,添加lib标签

<lib dir="${solr.install.dir:../..}/contrib/db/lib" regex=".*\.jar" />

二:配置requestHandler

在solrconfig.xml中,添加一个dataimport的requestHandler

​​​​​​​

第三步:创建data-config.xml

在solrconfig.xml同级目录下,创建data-config.xml(这个里面,就可以让pid对应上面的id了。

这个sql语句可以自己随便写,但是必须是自己需要的数据)

重启后:Dataimport就有用了,这个拦截路径正好是我们配的那个.

solrJ(用java操作)?

Solrj就是solr服务器的java客户端。

未完,待续!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值