solr7安装以及集成ik分词器

今天来研究了一下solr,以及怎么集成ik分词器,把研究的过程记录下来,整个过程是在windows 7系统中完成的。

参考:http://blog.csdn.net/frankcheng5143/article/details/71159936

          http://blog.csdn.net/xiaokang123456kao/article/details/72846591

          https://www.cnblogs.com/zhuxiaojie/p/5764680.html

下载solr7.2.1、ik分词器

1、solr7环境要求

solr7.2.1需要java8环境,且需要在环境变量中添加 JAVA_HOME变量,指向jdk1.8的目录,如下图:


2、下载solr并启动

把下载的solr解压到出来,并通过cmd窗口进入到solr-7.2.1\bin目录,在地址栏中输入cmd,打开命令窗口




输入以下命令运行solr

solr.cmd start

2、打开控制台

在浏览器中输入http://localhost:8983,如果能打开solr控制台界面,说明solr启动成功。

3、创建一个core

我们创建一个articles的集合,输入如下命令:

solr.cmd create -c articles

之后就可以在控制台中看到创建的articles了


4、配置ik分词

1、把下载的ik分词器解压出来,并把下面两个jar包复制到:solr-7.2.1\server\solr-webapp\webapp\WEB-INF\lib里

2、在solr-7.2.1\server\solr-webapp\webapp\WEB-INF目录下新建一个classes目录,把下面三个文件复制进去

 

3、进入solr-7.2.1\server\solr\articles\conf目录,用记事本或其他文本编辑器打开managed-schema文件,在截图中的位置添加如下代码:

  <fieldType name="text_ik" class="solr.TextField">  
        <analyzer type="index" useSmart="false"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
        <analyzer type="query" useSmart="true"
            class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType> 

4、重新启动solr

关闭:solr.cmd stop -all
启动:solr.cmd start

在控制台中选中articles,并打开Analysis菜单,输入截图中的文字,点击按钮,发现可以分词成功,说明ik分词器安装成功。


5、java操作solr

1、在managed-schema文件中追加以下内容,field 中的name字段要跟java实体对应

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

2、pom文件添加如下依赖

 <dependencies>
          <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>5.5.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!-- Jackson Json处理工具包 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.4.2</version>
        </dependency>
    </dependencies>

3、添加SolrDataDTO.java文件

package solrtest01;

import java.io.Serializable;

import org.apache.solr.client.solrj.beans.Field;

public class SolrDataDTO implements Serializable {

	
	private static final long serialVersionUID = 1L;
	
	@Field("id")
	private Integer id;
	@Field("title")
	private String title;
	@Field("labels")
	private String labels;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getLabels() {
		return labels;
	}
	public void setLabels(String labels) {
		this.labels = labels;
	}
	
}
4、添加SolrUtils 操作solr
package solrtest01;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
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;

public class SolrUtils {
	
	 private String serverUrl = "http://localhost:8983/solr/articles";
	 
	 public void Add(SolrDataDTO dto) throws IOException, SolrServerException{
		 HttpSolrClient client=new HttpSolrClient(serverUrl);
		 SolrInputDocument document=new SolrInputDocument();
		 client.addBean(dto);
		 client.commit();
	 }
	 
	 public List<SolrDataDTO> search(String keywords,Integer page, Integer rows ) throws SolrServerException, IOException{
		 HttpSolrClient client=new HttpSolrClient(serverUrl);
		 SolrQuery solrQuery = new SolrQuery(); //构造搜索条件
	        solrQuery.set("q","title:" + keywords); //搜索关键词
	        // 设置分页 start=0就是从0开始,,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了。
	        solrQuery.setStart((Math.max(page, 1) - 1) * rows);
	        solrQuery.setRows(rows);
	      //执行搜索
	        QueryResponse queryResponse = client.query(solrQuery);
	      //搜索结果
	        SolrDocumentList results = queryResponse.getResults();
	        //总数量
	        long numFound = results.getNumFound();
	        List<SolrDataDTO> dataDTOs=new ArrayList<SolrDataDTO>();
	        for (SolrDocument solrDocument : results) {
	        	SolrDataDTO dto=new SolrDataDTO();
	        	dto.setId(Integer.valueOf(solrDocument.get("id").toString()));
	        	dto.setLabels(solrDocument.get("labels").toString());
	        	dto.setTitle(solrDocument.get("title").toString());
	        	dataDTOs.add(dto);
			}
	        //List<SolrDataDTO> dataDTOs=queryResponse.getBeans(SolrDataDTO.class);
	        System.out.println("查询出来的总量为:"+numFound);
	        return dataDTOs;
	 }
	 
	 public void del() throws SolrServerException, IOException
	 {
		 HttpSolrClient client=new HttpSolrClient(serverUrl);
		 List<String>ids=new ArrayList<String>();
		 ids.add("1");
		 ids.add("2");
		 ids.add("3");
		 ids.add("4");
		 ids.add("5");
		 client.deleteById(ids);
		 client.commit();
	 }
	 
}

5、solr添加数据
SolrUtils solrUtils=new SolrUtils();
	
	@Test
	public void add() throws IOException, SolrServerException
	{
		SolrDataDTO dto=new SolrDataDTO();
		dto.setId(4);
		dto.setTitle("标题4");
		dto.setLabels("动物,羊,马");
		solrUtils.Add(dto);
		
		dto.setId(5);
		dto.setTitle("标题5");
		dto.setLabels("公交,地铁,飞机");
		solrUtils.Add(dto);
	}

6、打开solr控制台查看数据,发现数据写入成功


7、我们在labels字段上使用了ik分词器,效果如下





猜你喜欢

转载自blog.csdn.net/long530439142/article/details/79353845