Solr 之 Linux 安装 solr-4.10.3

Solr-8.10.1版本参考:Solr 之 Linux 安装 solr-8.10.1


相关文件

Linux: CentOS 7 64位
Jdk: 1.8.0_231
Tomcat: 9.0.19
Solr: solr-4.10.3
中文分词器: IK Analyzer 2012FF_hf1

solr-4.10.3 提取码:solr
Tomcat 9.0.19 提取码:tomc
IK Analyzer 2012FF_hf1 提取码:ikan

solr-4.10.3 相关目录

bin: 提供一个 solr 的 启动 命令,采用 jetty (类似于tomcat)
contrib: solr 扩展包
dist: 提供了:solr-4.10.3.war,需要把该包部署到tomcat;solr-solrj-4.10.3.jar:solr客户端
example: 里面有一个solr目录很重要,可以作为solrhome

IK Analyzer 2012FF_hf1

主要jar包:IKAnalyzer2012FF_u1.jar

在 solr-4.10.3/example/solr/collection1/conf 下:

  1. schema.xml:定义solr使用的所有的业务域
  2. solrconfig.xml: 配置solr服务的相关配置

 

一、搭建 Solr 服务器

1. 上传并解压Solr相关文件

jkd 的安装就不说了

rz -e //上传文件
tar zxf solr-4.10.3.tgz.tgz
tar zxf # tar zxf apache-tomcat-9.0.19.tar.gz
unzip -d IK\ Analyzer\ 2012FF\ hf1 IK_Analyzer_2012FF_hf1.zip

解压后:
在这里插入图片描述

2. 配置

  1. 把 tomcat 复制到 /usr/local/solr ,把 solr 复制到 /usr/local/solr/tomcat/webapps/

    mkdir /usr/local/solr
    cp -r apache-tomcat-9.0.19 /usr/local/solr/tomcat    // 复制文件夹要加 -r
    cp solr-4.10.3/dist/solr-4.10.3.war /usr/local/solr/tomcat/webapps/solr.war
    
  2. 启动并关闭tomcat:

    /usr/local/solr/tomcat/bin/startup.sh
    /usr/local/solr/tomcat/bin/shutdown.sh   // 关闭tomcat
    tailf /usr/local/solr/tomcat/logs/catalina.out  //查看tomcat日志
    

    注意:只有启动并关闭之后才可以删除 webapps下的solr.war

  3. 复制日志相关jar包到solr:

    cp -rf solr-4.10.3/example/lib/ext/* /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
    
  4. 配置solrhome

    mkdir /usr/local/solr/solrhome
    cp -rf solr-4.10.3/example/solr/* /usr/local/solr/solrhome/
    
  5. 告诉 solr 服务器 solrhome 的位置:
    修改solr工程的web.xml:

    vim /usr/local/solr/tomcat/webapps/solr/WEB-INF/web.xml
    

    找到下面的地方
    在这里插入图片描述
    修改为:

    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/usr/local/solr/solrhome/</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
    

    安装完成。

  6. 启动并关闭tomcat:

    /usr/local/solr/tomcat/bin/startup.sh
    

3. 测试访问

http://ip:8080/solr/
在这里插入图片描述

简单使用

在这里插入图片描述
高亮显示结果:
在这里插入图片描述

 

二、配置中文分词器 IK Analyzer 2012FF_hf1

在solr中,每一个记录需要一个都需要id
定义我们自己的搜索字段:id、title、price、category_name等

配置 IK Analyzer 2012FF_hf1

  1. 复制 jar 包 到solr的lib下
    cd IK\ Analyzer\ 2012FF_hf1
    cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
    
  2. 复制 ext_stopword.dic、IKAnalyzer.cfg.xml、mydict.dic 到 classpath(即classes)下
    mkdir /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
    cp ext_stopword.dic IKAnalyzer.cfg.xml mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes/
    
  3. 在solrhome下的collection1/conf/schema.xml定义 业务域(collection1)
    vim /usr/local/solr/solrhome/collection1/conf/schema.xml
    
    本身已经指定了一些分词器:
    在这里插入图片描述
    添加以下内容到最后:
    <fieldType name="text_ik" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    </fieldType>
    
    <field name="item_title" type="text_ik" indexed="true" stored="true"/>
    <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
    <field name="item_price"  type="long" indexed="true" stored="true"/>
    <field name="item_image" type="string" indexed="false" stored="true" />
    <field name="item_category_name" type="string" indexed="true" stored="true" />
    <field name="item_desc" type="text_ik" indexed="true" stored="false" />
    
    <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
    <copyField source="item_title" dest="item_keywords"/>
    <copyField source="item_sell_point" dest="item_keywords"/>
    <copyField source="item_category_name" dest="item_keywords"/>
    <copyField source="item_desc" dest="item_keywords"/>
    
    1. 只有 solr.TextField 这个类型可以指定分词器(自定义都使用这个)
      在这里插入图片描述
    2. 设置 分词域名 为 text_ik
    3. item_category_name 不进行分词,type="string" 相当于 StringField:不分词,只索引
    4. 需要分词:type="text_ik"
    5. item_keywords: 复制域,复制下面的东西统一管理,索引时只需要搜索item_keywords即可
    6. 基本写法(按照这个模板写即可):
      <fieldType name="text_ik" class="solr.TextField">  
          <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>  
      </fieldType>  
      <field name="text_ik"  type="text_ik" indexed="true"  stored="true"  multiValued="false" />
      

重启tomcat,测试分词

在这里插入图片描述

三、SolrJ 简单使用

maven依赖

<!-- solr客户端 -->
<dependency>
	<groupId>org.apache.solr</groupId>
	<artifactId>solr-solrj</artifactId>
	<solrj.version>4.10.3</solrj.version>
</dependency>

添加对象

  1. 创建一个solrServer对象。创建HttpSolrServer对象,需要指定solr服务的url http://ip:8080/solr/collection1
  2. 创建一个文档对象 SolrInputDocumnet
  3. 向文档中添加域,域的名称必须在schema.xml中定义(已定义),且必须有id域
  4. 把文档对象写入索引库
  5. 提交

Solr查询

  1. 创建一个SolrServer对象
  2. 创建SolrQuery对象
  3. 设置查询条件、过滤条件、分页条件、排序条件、高亮条件
  4. 执行查询,得到一个Response对象
  5. 获取查询结果、取查询结果总记录数
  6. 分析所有的查询结果,对单条记录进行处理
import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

public class TestSolrJ {
	private String url = "http://192.168.25.131:8080/solr/collection1";
	
	@Test
	public void addDocument() throws Exception{
		// 1. 创建一个solrServer对象。创建HttpSolrServer对象,需要指定solr服务的url http://192.168.25.136:8080/solr/collection1	
		SolrServer solrServer = new HttpSolrServer(url);
		// 2. 创建一个文档对象 SolrInputDocumnet
		SolrInputDocument solrInputDocument = new SolrInputDocument();
		// 3. 向文档中添加域,域的名称必须在schema.xml中定义(已定义),且必须有id域
		solrInputDocument.addField("id", "test001");
		solrInputDocument.addField("item_title", "测试标题");
		solrInputDocument.addField("item_price", 1003);
		// 4. 把文档对象写入索引库
		solrServer.add(solrInputDocument);
		// 5. 提交
		solrServer.commit();
	}

	@Test
	public void deleteDocumentById() throws Exception{
		SolrServer server = new HttpSolrServer(url);
		server.deleteById("test001");
		server.commit();
	}
	
	@Test
	public void deleteDocumentByQuery() throws Exception{
		SolrServer server = new HttpSolrServer(url);
		server.deleteByQuery("id:test001");
		server.commit();
	}
	
	@Test
	public void searchDocument() throws Exception{
		// 1. 创建一个SolrServer对象
		SolrServer server = new HttpSolrServer(url);
		// 2. 创建SolrQuery对象
		SolrQuery solrQuery = new SolrQuery();
		// 3. 设置查询条件、过滤条件、分页条件、排序条件、高亮条件//solrQuery.setQuery("*:*"); = solrQuery.set("q", "*:*");//q=查询条件
//		solrQuery.set("q", "*:*"); 
//		solrQuery.setQuery("*:*");//查询所有
		solrQuery.setQuery("手机");
		solrQuery.setStart(0);//从第一条开始
		solrQuery.setRows(2);//每页20条
		solrQuery.setHighlight(true);//设置高亮
		solrQuery.addHighlightField("item_title");// 设置高亮显示的域
		solrQuery.setHighlightSimplePre("<em>");// 设置高亮显示的域。<em>用<div>也行
		solrQuery.setHighlightSimplePost("</em>");// 设置高亮显示的域
		solrQuery.set("df","item_keywords");// 设置默认搜索域
		// 4. 执行查询,得到一个Response对象
		QueryResponse response = server.query(solrQuery);
		// 5. 获取查询结果
		SolrDocumentList solrDocumentList = response.getResults();
		//		取查询结果总记录数
		System.out.println("查询结果总记录数:" + solrDocumentList.getNumFound());
		
		// 6. 分析所有的查询结果,对单条记录进行处理
		for (SolrDocument solrDocument : solrDocumentList) {
			System.out.println(solrDocument.get("id"));
			// 取itemTitle里面的 高亮显示
			Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
			List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
			String itemTitle = (String) solrDocument.get("item_title");
			if (list != null && list.size()>0) {
				itemTitle = list.get(0);
			}
			System.out.println(itemTitle);
			System.out.println(solrDocument.get("item_sell_point"));
			System.out.println(solrDocument.get("item_price"));
			System.out.println(solrDocument.get("item_image"));
			System.out.println(solrDocument.get("item_category_name"));
			System.out.println(solrDocument.get("item_desc"));
			System.out.println("===============================================");
		}
	}
}

 


若有不正之处,请谅解和批评指正,谢谢~
转载请标明:
https://blog.csdn.net/vihem/article/details/121332502

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值