Solr 7.3.1 部署至 tomcat 服务器,配置ik中文分析器

Solr下载

官网下载地址中下载对应版本,目前笔者下载的版本为最新版7.3.1。 
下载完成后,将压缩包解压,放至指定目录。

解压后,Solr目录结构如下: 
image.png

部署至tomcat 8.0

1.将solr-7.3.1\server\solr-webapp下的webapp文件夹复制到/usr/local/solr/tomcat/webapps目录下,并重命名为solr(名称可以随意) 
2. 复制solr-7.3.1\server\lib\ext下的所有jar包到/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib下(即刚刚复制并重命名为solr的文件夹下) 
3. 复制solr-7.3.1\server\lib下所有metrics-开头的jar包(一共有5个)到/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib下 
4. 复制solr-7.3.1\server\resources下的log4j.properties文件到/usr/local/solr/tomcat/webapps/solr/WEB-INF/classes/下(默认没有classes文件夹,需要手动新建) 
5. 复制solr-7.3.1\server\solr文件夹,到任意路径下(/usr/local/solr/solrhome/),并重命名为solr_home(命名随意) 
6. 修改apache-tomcat-8.0.15\webapps\solr\WEB-INF下的web.xml文件。

默认代码为注释状态,释放后,将env-entry-value设置为solr_home的路径

<env-entry>
     <env-entry-name>solr/home</env-entry-name>
     <env-entry-value>E:/webserver/solr_home</env-entry-value>
     <env-entry-type>java.lang.String</env-entry-type>
  </env-entry>

注释以下代码,否则项目会报403错误

<security-constraint>
    <web-resource-collection>
      <web-resource-name>Disable TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint/>
  </security-constraint>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Enable everything but TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method-omission>TRACE</http-method-omission>
    </web-resource-collection>
  </security-constraint>

7.在solr_home文件夹下创建一个mycore(名字随意)文件夹,并复制/root/solr-7.3.1/server/solr/configsets/_default/下的confi文件夹到mycore下。并在mycore下创建空文件夹data和core.properties文件。(创建二进制文件touch mytxt,创建文件vi censhi.txt,,创建文件夹mkdir mycore)

core.properties文件内容如下:

 name=mycore

最后mycore文件夹结构如下: 
image.png

8.运行apache-tomcat-8.0.15\bin下的startup.bat,启动tomcat。 
9.访问http://localhost:8080/solr/index.html#/,部署完成

image.png

扫描二维码关注公众号,回复: 2145515 查看本文章

ik-analyzer-solr7

ik-analyzer for solr7.x

IKAnalyzer的作者为林良益([email protected]),项目网站为http://code.google.com/p/ik-analyzer/

适配最新版solr7,并添加动态加载字典表功能;

在不需要重启solr服务的情况下加载新增的字典。


使用说明:


<!-- Maven仓库地址 -->
<dependency>
    <groupId>com.github.magese</groupId>
    <artifactId>ik-analyzer-solr7</artifactId>
    <version>7.x</version>
</dependency>
  • 1. 将jar包放入solr服务的jetty或tomcat的webapp/WEB-INF/lib/目录下(/usr/local/solr/tomcat/webapps/solr/WEB-INF/lib);

  • 2. 将resources目录下的5个配置文件放入solr服务的jetty或tomcat的webapp/WEB-INF/classes/目录下(/usr/local/solr/tomcat/webapps/solr/WEB-INF/classes);

    ①IKAnalyzer.cfg.xml
    ②ext.dic
    ③stopword.dic
    ④ik.conf
    ⑤dynamicdic.txt
    
  • 3. 配置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.1.1.1 业务字段配置

    业务字段判断标准:

    1、在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述

    2、后续的业务是否需要用到此字段。例如:商品id。

    需要用到的字段:

    1、商品id

    2、商品title

    3、卖点

    4、价格

    5、商品图片

    6、商品分类名称

    7、商品描述

    Solr中的业务字段:

    1、id——》商品id

    其他的对应字段创建solr的字段。

    <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"/>

     (solr7.4.0配置)

    < 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 = "plong"  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" />

    重新启动tomcat

     



    1.2   维护索引库

    添加:添加一个json格式的文件就可以。

    修改:在solr中没有update,只需要添加一个新的文档,要求文档id和被修改文档的id一致。原理是先删除后添加。

    删除:使用xml格式。

    删除两种方法:

    1、根据id删除:

    <delete>

    <id>test001</id>

    </delete>

    <commit/>

    2、根据查询删除:

    <delete>

    <query>*:*</query>

    </delete>

    <commit/>

    1  solrJ客户端

    需要依赖solrj的jar包。

    <!-- solr客户端 -->

                <dependency>

                      <groupId>org.apache.solr</groupId>

                      <artifactId>solr-solrj</artifactId>

                </dependency>

    1.1   使用solrj的使用


    1.2   把商品信息导入到索引库
     

    public class SolrTest {
    
    	//添加
    	@Test
    	public void addDocument() throws SolrServerException, IOException
    	{
    		//创建连接
    		SolrServer solrServer =new HttpSolrServer("http://192.168.253.130:8080/solr/mycore");
    		//创建一个空文档
    		SolrInputDocument document =new SolrInputDocument();
    		document.addField("id", "test001");
    		document.addField("item_title", "测试商品3");
    		document.addField("item_price", 54321);		
    		//把文档对象写进索引库
    		solrServer.add(document);
    		//提交
    		solrServer.commit();
    	}
    	//删除
    	@Test
    	public void deleteDocument() throws SolrServerException, IOException
    	{
    		//创建连接
    		SolrServer solrServer =new HttpSolrServer("http://192.168.253.130:8080/solr/mycore");
    	//	solrServer.deleteById("test001");
    		solrServer.deleteByQuery("*:*");
    		solrServer.commit();
    	}
    	//查询
    	@Test
    	public void queryDocument() throws SolrServerException
    	{
    		//创建连接
    		SolrServer solrServer =new HttpSolrServer("http://192.168.253.130:8080/solr/mycore");
    		//创建查询对象
    		SolrQuery query =new SolrQuery();
    		//设置查询条件
    		query.setQuery("*:*");
    	//	query.setStart(20);
    	//	query.setRows(50);
    		//执行查询条件
    		QueryResponse response = solrServer.query(query);
    		//去查询结果
    		SolrDocumentList solrDocumentList = response.getResults();
    		System.out.println("共查询记录:" + solrDocumentList.getNumFound());
    		for (SolrDocument solrDocument : solrDocumentList) {
    			System.out.println(solrDocument.get("id"));
    			System.out.println(solrDocument.get("item_title"));
    			System.out.println(solrDocument.get("item_price"));
    			System.out.println(solrDocument.get("item_image"));
    		}
    	}
    }
    

    使用java程序读取mysql数据库中的商品信息,然后创建solr文档对象,把商品信息写入索引库。

    需要发布一个服务。

    为了灵活的进行分布式部署需要创建一搜素的服务工程发布 搜素服务。Taotao-search。


  • 4. 启动solr服务测试分词;

  • 5. ik.conf文件说明:

    files=dynamicdic.txt
    lastupdate=0
    

    files为动态字典列表,可以设置多个字典表,用逗号进行分隔,默认动态字典表为dynamicdic.txt;

    lastupdate默认值为0,每次对动态字典表修改后请+1,不然不会将字典表中新的词语添加到内存中,lastupdate采用的是int类型,不支持时间戳,如果使用时间戳的朋友可以把源码中的int改成long即可;

  • 5-dynamicdic.txt 为动态字典,在此文件配置的词语不需重启服务即可加载进内存中;


猜你喜欢

转载自blog.csdn.net/gdsgdh308227363/article/details/80972919