Solr7.7.0 Solr 4.10.3 配置与使用

1. Solr简介

Lucene是API是类库,solr是基于Lucene开发的一个项目

2. 搭建环境

2.1 复杂搭建

  1. 第一步:安装tomcat。D:\temp\apache-tomcat-7.0.53

  2. 第二步:把solr的war包复制到tomcat 的webapp目录下。

把\solr-4.10.3\dist\solr-4.10.3.war复制到D:\temp\apache-tomcat-7.0.53\webapps下。
改名为solr.war

  1. 第三步:solr.war解压。使用压缩工具解压或者启动tomcat自动解压。解压之后删除solr.war

  2. 第四步:把\solr-4.10.3\example\lib\ext目录下的所有的jar包添加到solr工程中

  3. 第五步:配置solrHome和solrCore。

1)创建一个solrhome(存放solr所有配置文件的一个文件夹)。\solr-4.10.3\example\solr目录就是一个标准的solrhome。

2)把\solr-4.10.3\example\solr文件夹复制到D:\temp\0108路径下,改名为solrhome,改名不是必须的,是为了便于理解。

3)在solrhome下有一个文件夹叫做collection1这就是一个solrcore。就是一个solr的实例。一个solrcore相当于mysql中一个数据库。Solrcore之间是相互隔离。

i. 在solrcore中有一个文件夹叫做conf,包含了索引solr实例的配置信息。

ii. 在conf文件夹下有一个solrconfig.xml。配置实例的相关信息。如果使用默认配置可以不用做任何修改。

Xml****的配置信息:

Lib:solr服务依赖的扩展包,默认的路径是collection1\lib文件夹,如果没有 就创建一个

dataDir:配置了索引库的存放路径。默认路径是collection1\data文件夹,如 果data文件夹,会自动创建。

requestHandler**:**

image.png

image.png

第六步:告诉solr服务器配置文件也就是solrHome的位置。修改web.xml使用jndi的方式告诉solr服务器。

Solr/home****名称必须是固定的。

image.png

image.png

第七步:启动tomcat

第八步:访问http://localhost:8080/solr/

2.2 简单搭建

  1. 准备一个tomcat
  2. 吧dist中的war拷贝到tomcat的wabapps文件下
  3. 吧war解压
  4. 配置solrHome
    1. 吧\example \solr 下的全部文件拷贝到指定的位置
    2. 陪孩子slor项目与solrHome的关系,修改solr项目的web.xml 中的 solr/home 的value
  5. 添加solr项目运行的拓展包,吧example\lib\ext下的所有jar包放到solr项目中
  6. 重新启动tomcat
  7. 访问

2.3 搭建7.X

  1. 官网下载zip
  2. 解压
  3. 添加自己的core
    1、创建core目录
    在/chowdate/solr-7.4.0/server/solr目录下创建new_core目录(名字自己定)
    
    2、复制配置文件
    复制/chowdate/solr-7.4.0/server/solr/configsets/_default下的conf文件夹到/chowdate/solr-7.4.0/server/solr/new_core/下。
    
    3、添加core
    在页面添加new_core(必须先做上面1、2步,不然会提示报错)。
    
  4. 设置第三方分词器
    1. 下载ik-analyzer-solr7
    2. 将jar包放入Solr服务的Jetty或Tomcat的webapp/WEB-INF/lib/目录下;
    3. 将resources目录下的5个配置文件放入solr服务的Jetty或Tomcat的webapp/WEB-INF/classes/目录下;
    ① IKAnalyzer.cfg.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
    <properties>  
    	<comment>IK Analyzer 扩展配置</comment>
    	<!--用户可以在这里配置自己的扩展字典 -->
    	<entry key="ext_dict">ext.dic;</entry> 
    	<!--用户可以在这里配置自己的扩展停止词字典-->
    	<entry key="ext_stopwords">stopword.dic;</entry> 
    </properties>
    
    ② ext.dic
    ③ stopword.dic
    ④ ik.conf
    ⑤ dynamicdic.txt
    
    1. 配置Solr的managed-schema,添加ik分词器,示例如下;
        <!-- ik分词器 -->
        <fieldType name="text_ik" class="solr.TextField">
          <analyzer type="index">
              <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
              <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
          <analyzer type="query">
              <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
              <filter class="solr.LowerCaseFilterFactory"/>
          </analyzer>
        </fieldType>
    
    1. ik.conf文件说明:
        files=dynamicdic.txt
        lastupdate=0
    
    1. dynamicdic.txt 为动态词典
      在此文件配置的词语不需重启服务即可加载进内存中。 以#开头的词语视为注释,将不会加载到内存中。

3. solr core 类比成mysql的database

  1. 添加solr core 的步骤
    1. 从collection1得到文件位置
    2. 复制文件夹 改名
    3. 修改该文件夹下的core.properties
    4. 从启tomcat

4. 使用solr控制台

4.1 添加索引

document中

  1. solr中的域名是先定义后使用
  2. 添加文档时id不能少

4.2 删除索引

document中 选择xml

  1. 语法1:更具id
<delete>
    <id>1</id>
</delete>
<commit/>
  1. 语法2:更具语法
<delete>
    <query>id:2</query>
</delete>
<commit/>

删除所有

<delete>
    <query>*:*</query>
</delete>
<commit/>

image.png

4.3 查询

  1. q为查询
*:*
id:1
等等
  1. fq为过滤条件products_name:[0 TO 100] []为包含 {}为不包含 支持通配符*
  2. sort 为排序id asc asc升序 desc降序
  3. fl 为只显示那些列id,title
  4. df 是默认域 df填写了列 那么q只用填写值
  5. HL下面 hl.fl写列名

5. java代码操作solr——solrJ

  1. 导入jar包
    1. solrJ核心包 dist\solr-solrj-xxx.jar
    2. solrJ扩展包 dist\solrj-lib下的全部
    3. solr的扩展包 example\lib\ext下的所有

5.1 添加到索引库

@Test
public void addIndex() throws IOException, SolrServerException {
    // 1. 获取solr的服务器用于连接solr项目
    SolrServer solrServer = new HttpSolrServer("http://localhost/solrs/collection1");

    // 2. 执行slorServer的添加方法
    SolrInputDocument doc = new SolrInputDocument();
    doc.addField("name", "solrJ添加");
    doc.addField("content", "solrJ添加内容");
    doc.addField("id", "2");

    solrServer.add(doc);
    solrServer.commit();
}

5.2 修改索引

 /**
 * 修改
 * @throws Exception
 * @throws IOException
 */
@Test
public void updateIndex() throws Exception, IOException{
    //1、获取solr的服务器 用于连接solr项目
    SolrServer solrServer = new HttpSolrServer("http://localhost/solrs/collection1");
    //2、执行solrServer的添加方法
    SolrInputDocument doc = new SolrInputDocument();
    doc.addField("name", "solrJ添加name修改");
    doc.addField("content", "solrJ添加的内容修改");
    doc.addField("id", "2");
    solrServer.add(doc);
    solrServer.commit();
}

5.3 删除索引

/**
 * 删除
 * @throws Exception
 * @throws IOException
 */
@Test
public void deleteIndex() throws Exception, IOException{
    //1、获取solr的服务器 用于连接solr项目
    SolrServer solrServer = new HttpSolrServer("http://localhost/solrs/collection1");
    solrServer.deleteById("change.me");
    //solrServer.deleteByQuery("id:2");
    //solrServer.deleteByQuery("*:*");
    solrServer.commit();
}

5.4 查询

/**
 * 查询
 * @Author chenpeng
 * @Description //TODO
 * @Date 23:52
 * @Param []
 * @return void
 **/
@Test
public void searchIndex() throws Exception, IOException{
    //1、获取solr的服务器 用于连接solr项目
    SolrServer solrServer = new HttpSolrServer("http://localhost/solrs/collection1");
    //2、设置查询条件
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery("*:*");
    //3、执行
    QueryResponse queryResponse = solrServer.query(solrQuery);
    //4、获取结果
    SolrDocumentList results = queryResponse.getResults();
    System.out.println("总记录数:"+results.getNumFound());
    for (SolrDocument doc : results) {
        System.out.println(doc.get("id"));
        System.out.println(doc.get("name"));
        System.out.println(doc.get("content"));
    }
}

6. 添加自定义域名

  1. 找到配置文件 SolrCore下config/schema.xml

6.1 属性

6.1.1 field

<field name="_version_" type="long" indexed="true" stored="true"/>

name域名称
type域类型
indexed是索引
stored 是否存储
required 必须要有的
multivalued 是否可以多值

6.1.2 dynamicField

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

name 中的值为通配符

6.1.3 uniqueKey

为一的

 <uniqueKey>id</uniqueKey>

###6.1.4 copyField

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

source 源域名
dest 目标域名

6.1.5 fieldType

<fieldType name="string" class="solr.StrField" sortMissingLast="true" />

name 类型名称
class 类

6.2 自定义

  1. 第一步:把IKAnalyzer2012FF_u1.jar添加到solr/WEB-INF/lib目录下。
  2. 第二步:复制IKAnalyzer的配置文件和自定义词典和停用词词典到solr的classpath下。
  3. 第三步:在schema.xml中添加一个自定义的fieldType,使用中文分析器。
<!-- IKAnalyzer-->
    <fieldType name="text_ik" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>
  1. 第四步:定义field,指定field的type属性为text_ik
<!--IKAnalyzer Field-->
   <field name="title_ik" type="text_ik" indexed="true" stored="true" />
   <field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
  1. 第五步:重启tomcat

6.3 demo

6.3.1修改配置文件

修改solrHome\collection1\conf\schema.xml

<!-- 商品名称 属性为自定义的  type为是否为索引 stored为是否存储原文 -->
<field name="products_name" type="text_ik" indexed="true" stored="true" />
<!--价格-->
<field name="products_price" type="float" indexed="true" stored="true" />
<!--内容-->
<field name="products_description" type="text_ik" indexed="true" stored="false" />
<!--图片-->
<field name="products_picture" type="stirng" indexed="false" stored="true" />
<!--分类-->
<field name="products_catalog_name" type="String" indexed="true" stored="true" />

<!--设置商品名称和内容-->
<field name="products_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<!--复制进去 名称和内容-->
<copyField source"products_name" dest="products_keywords"/>
<copyField source"products_description" dest="products_keywords"/>

<!--设置第三方分割文字的jar包-->
<fieldType name="text_ik" class="solr.TextField">
    <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

6.3.2 导入数据 低版本

定义dataimport-handler步骤:

  1. 打开collection1/conf/solrconfig.xml
  2. 如果是老版本就导入包 到solrHomex\collection1\lib 如果没有就创建 新版本无需
    1. dist\ solr-dataimporthandler-extras-4.10.3.jar
    2. solr-dataimporthandler-4.10.3.jar
  3. 在solrconfig.xml中添加如下配置
<requestHandler name="/dataimport" 
    class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">data-config.xml</str>
     </lst>
</requestHandler> 

  1. 创建配置文件data-config.xml放到和solrconfig.xml同目录
    data-config.xml内容如下:
    <?xml version="1.0" encoding="UTF-8" ?>  
    <dataConfig>   
    <dataSource type="JdbcDataSource"   
    		  driver="com.mysql.jdbc.Driver"   
    		  url="jdbc:mysql://localhost:3306/lucene"   
    		  user="root"   
    		  password="root"/>   
    <document>   
    	<entity name="product" query="SELECT pid,name,catalog_name,price,description,picture FROM products ">
    		 <field column="pid" name="id"/> 
    		 <field column="name" name="product_name"/> 
    		 <field column="catalog_name" name="product_catalog_name"/> 
    		 <field column="price" name="product_price"/> 
    		 <field column="description" name="product_description"/> 
    		 <field column="picture" name="product_picture"/> 
    	</entity>   
    </document>   
    
    </dataConfig>
    
  2. 在schema.xml中添加域,这才能查出来
	<!-- products Field -->
	<field name="product_name" type="text_ik" indexed="true" stored="true" />
	<field name="product_catalog_name" type="string" indexed="true" stored="true" />
	<field name="product_price" type="float" indexed="true" stored="true" />
	<field name="product_description" type="text_ik" indexed="true" stored="false" />
	<field name="product_picture" type="string" indexed="false" stored="true" />
	<field name="product_release_time" type="date" indexed="true" stored="true" />
    	<!-- products copyField -->
    	<field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
	<copyField source="product_name" dest="product_keywords"/>
	<copyField source="product_description" dest="product_keywords"/>
  1. 重启tomcat

6.4.3 导入数据 7.X版本

导入数据库中的数据到Solr中

  1. 创建data-config.xml文件
    在/chowdate/solr-7.4.0/server/solr/new_core/conf目录下创建一个文件data-config.xml,与solrconfig.xml同级

  2. 修改solrconfig.xml文件
    修改/chowdate/solr-7.4.0/server/solr/new_core/conf/solrconfig.xml文件

在上放增加以下这段代码。

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
       <lst name="defaults">
          <str name="config">data-config.xml</str>
       </lst>
</requestHandler>

其中里的内容就是我们在上一步创建的data-config.xml文件,将它们关联起来。

  1. 修改data-config.xml文件

接下来我们打开data-config.xml文件,配置相关的数据库属性,即我们要导入那张表的哪些字段,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="source1" type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://10.10.9.103:3306/auth-cas"
              user="root"
              password="****"
              batchSize="-1" />
    <document>
        <entity name="user" dataSource="source1"
            query="SELECT uid,user_code,account,password,user_name,gender,last_login_time,update_time FROM uap_tb_gmvcs_user">
 
            <field column='uid' name='uid' />
            <field column='user_code' name='user_code' />
            <field column='account' name='account' />
            <field column='password' name='password' />
            <field column='user_name' name='user_name' />
            <field column='gender' name='gender' />
            <field column='last_login_time' name='last_login_time' />
            <field column='update_time' name='update_time' />
        </entity>
    </document>
</dataConfig>

dataSource 中,url是你要访问的数据库路径,我这里指定到我的auth-cas 数据库。user是用户名,password是你的数据库密码。

query是一个sql语句,你需要导入哪张表的哪些字段,查就行了。然后标签中的column属性是你SQL语句中查询的字段,跟数据库中对应;name属性是你给它起的一个别名,应该是必须指定的(本人没试过不指定的结果),至于name属性是干嘛的,继续往下操作,自然会明白。有多个查询字段就需要有多个标签,每一个标签对应一个字段。

document配置数据库查询语句与managed_schema域的对应关系。目的是,在core导入数据的时候,会先通过该配置信息链接到数据库通过查询语句把数据查询出来,通过数据库字段与managed_schema域关联关系创建索引

  1. 修改managed-schema文件

修改/chowdate/solr-7.4.0/server/solr/new_core/conf/managed-schema文件,将刚才在data-config.xml中配置的标签添加进来。

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <!-- docValues are enabled by default for long type so we don't need to index the version field  -->
    <field name="_version_" type="plong" indexed="false" stored="false"/>
    <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
    <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>
    <!-- 上面是原有的的字段 -->     
 
    <!-- 自己的导入的字段 -->
    <field name="uid" type="string" indexed="true" stored="true" />
    <field name="user_code" type="string" indexed="true" stored="true" />
    <field name="account" type="string" indexed="true" stored="true" />
    <field name="password" type="string" indexed="true" stored="true" />
    <field name="user_name" type="string" indexed="true" stored="true" />
    <field name="gender" type="string" indexed="true" stored="true" />
    <field name="last_login_time" type="pdate" indexed="true" stored="true" />
    <field name="update_time" type="pdate" indexed="true" stored="true" />

这里里的name属性值,就是我们刚才在data-config.xml中标签的name属性值,这是name属性的第一个用途,关联起来。

name:是这个域的名称,在整个managed_schema文件里面需要唯一,不能重复,这里定义成跟数据库表字段的名称,方便使用。当然,也可以定义成其他名字。

type:是表示这个字段的类型是什么,string是字符串类型,int是整形数据类型,date是时间类型,相当于数据库里面的timestamp。

indexed:表示是否索引,索引的话就能查询到,否则,搜索的时候,不会出现。

stored:表示是否存储到索引库里面。

required:是否必须

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

  1. 下载连接数据库和导入数据的jar包

现在涉及到数据库了,肯定需要依赖一些jar包,下载三个jar包 下载地址:http://mvnrepository.com/

mysql-connector-java-8.0.11.jar

solr-dataimporthandler-7.7.0.jar

solr-dataimporthandler-extras-7.7.0.jar

三个jar包 放到/chowdate/solr-7.4.0/server/solr-webapp/webapp/WEB-INF/lib 目录下

然后打开solr-7.7.0/server/solr/new_core/conf/solrconfig.xml,引用上面提到的jar包,如下。

<!-- mysql导入增加的包开始--> 
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-.*\.jar" /> 
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> 
<!-- mysql导入增加的包结束-->

关闭然后重启 ./bin/solr stop -all ./bin/solr start -force

  1. 导入数据

再次访问我们刚才的页面,在左侧找到我们部署好的new_core工程,点击Dataimport,再选择full-import(全部导入),点击Execute,出现下面的页面,证明这张表的数据已经导入进来了。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值