CentOS7安装使用Slor

12 篇文章 0 订阅

直接上

cd /usr/local/src

1.下载:wget https://mirror.bit.edu.cn/apache/lucene/solr/8.6.2/solr-8.6.2.tgz
解压: tar -xzvf solr-8.6.2.tgz

2.打开解压后的目录
拷贝server/solr-webapp/webapp下所有到tomcat并命名solr8
cp -r server/solr-webapp/webapp/ /usr/local/tomcat9/webapps/solr8

3.拷贝server/lib/里开头为metrics所有文件到tomcat
cd /usr/local/src/solr-8.6.2/server/lib
cp ./metrics-* /usr/local/tomcat9/webapps/solr8/WEB-INF/lib/

4.拷贝server/lib/ext下所有到tomcat
cp ./ext/* /usr/local/tomcat9/webapps/solr8/WEB-INF/lib/

5.拷贝log4j到tomcat, 然后编辑一下日志文件,改一下生成文件的地址 不然日志文件到处都是
mkdir /usr/local/tomcat9/webapps/solr8/WEB-INF/classes 
cd /usr/local/src/solr-8.6.2/server/resources/
cp -r log4j2* /usr/local/tomcat9/webapps/solr8/WEB-INF/classes/

6.创建solrhome,把server下solr拷贝成solr8home
cp -r ./server/solr  /usr/local/solr8home

7.打开 cd  /usr/local/tomcat9/webapps/solr8/WEB-INF/
vim web.xml
				注释这段代码
				<!--
				  <security-constraint>
					...
				-->
				添加这些代码,保存退出
				<env-entry>
				    <env-entry-name>solr/home</env-entry-name>
				    <env-entry-value>/usr/local/solr8home</env-entry-value>
				    <env-entry-type>java.lang.String</env-entry-type>
				</env-entry>

8.访问solr,创建一个项目  myshop

9.拷贝conf
cp -r /usr/local/src/solr-8.6.2/server/solr/configsets/_default/conf  /usr/local/solr8home/myshop/
  1. 把ik分词器和mysqljdbc包,还有不知道啥玩意的两个包。放在tomcat的solr的lib下
    自己百度下载吧
    cd /usr/local/tomcat9/webapps/solr8/WEB-INF/lib
    在这里插入图片描述
    在这里插入图片描述
11.增加数据库配置
cd /usr/local/solr8home/myshop/conf
vim solrconfig.xml

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


12.编辑数据库配置
vim data-config.xml

<dataConfig>
        <dataSource type="JdbcDataSource"
                driver="com.mysql.cj.jdbc.Driver"
                url="jdbc:mysql://127.0.0.1:3306/db_shop?characterEncoding=utf8;useSSL=false;serverTimezone=UTC;rewriteBatchedStatements=true"
                user="xxxxx"
                password="xxxxx"/>
     <!--这里配置要映射的表名product和查询语句。column是数据库的字段,name是...solr查询出来的字段-->          
    <document>
        <entity name="product" query="select product_id, price, category_name, category_id, sort, pic, name, sub_title, keywords from product">
            <field column="product_id" name="id" />
            <field column="name" name="name" />
            <field column="sub_title" name="sub_title" />
            <field column="keywords" name="keywords" />
            <field column="pic" name="pic" />
            <field column="price" name="price" />
            <field column="category_id" name="category_id" />
            <field column="category_name" name="category_name" />
            <field column="sort" name="sort" />
        </entity>
    </document>	
</dataConfig>

13.设置字段参数
vim managed-schema    找个地放添加下面的

  <field name="price" type="pdouble" indexed="true" stored="true"/>
  <!-- <field name="product_id" type="pint" uninvertible="true" indexed="true" stored="true"/> -->
  <field name="sort" type="pint" uninvertible="true" indexed="true" stored="true"/>
  <field name="pic" type="string" uninvertible="true" indexed="true" stored="true"/>
  <field name="category_id" type="string" uninvertible="true" indexed="true" stored="true"/>
  <field name="sub_title" type="text_ik" uninvertible="true" indexed="true" stored="true"/>
  <field name="keywords" type="text_ik" uninvertible="true" indexed="true" stored="true"/>
  <field name="name" type="text_ik" uninvertible="true" indexed="true" stored="true"  />
  <field name="category_name" type="string" uninvertible="true" indexed="true" stored="true" />
  <field name="allkey" type="text_ik" indexed="true" stored="true" multiValued="true"/>
  <copyField source="name" dest="allkey"/>
  <copyField source="category_name" dest="allkey"/>
  <copyField source="sub_title" dest="allkey"/>

	<!--设置ik分词器-->
   <fieldType name="text_ik" class="solr.TextField">
    <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>
  

启动tomcat…

Springboot中使用

pom.xml

 <!--solr-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-solr</artifactId>
 </dependency>
 <dependency>
     <groupId>org.apache.solr</groupId>
     <artifactId>solr-solrj</artifactId>
     <version>8.2.0</version>
 </dependency>

application.yml

spring:
  data:
    solr:
      host: "http://127.0.0.1:8081/solr8/myshop"  #tomcat的

service

/**
 * solr操作
 */
@Service
public class Service_Search {

    @Resource
    SolrClient client;

    //查询
    public ProductVo QueryGoods(int pageStart, int pageSize, String query, String filtration, String interval, String SortField, String sort) throws Exception {
        SolrQuery solrQuery = new SolrQuery();
        List<Product> productList = new ArrayList<>();
        ProductVo vo = new ProductVo();

        if (query != null && query != "" && query != "null") {
            query = query.replaceAll(" ", "");
            solrQuery.setQuery("allkey:" + query);
        } else {
            solrQuery.set("q", " *:* ");
        }
        
        solrQuery.set("defType", "edismax");
        solrQuery.set("mm", "100%");

        //过滤条件查询
        if (filtration != null && filtration != "") {
            solrQuery.addFilterQuery(filtration);
        }
        //价格搜索
        if (interval != null && interval != "") {
            String[] strings = interval.split("-");
            solrQuery.addFilterQuery("price:[" + strings[0] + " TO " + strings[1] + "]");
        }
        //倒序
        if (SortField != null && SortField != "") {
            if (sort.equals("desc")) {
                solrQuery.addSort(SortField, SolrQuery.ORDER.desc);
            } else {
                solrQuery.addSort(SortField, SolrQuery.ORDER.asc);
            }
        }
        //分页设置
        solrQuery.setStart(pageStart);
        solrQuery.setRows(pageSize);
        solrQuery.add("df", "name");

        //设置高亮
        solrQuery.setHighlight(true);
        solrQuery.addHighlightField("name");
        solrQuery.addHighlightField("sub_title");
        solrQuery.setHighlightSimplePre("<b style='color:red'>");
        solrQuery.setHighlightSimplePost("</b>");
        
        QueryResponse response = client.query(solrQuery);
        Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
        SolrDocumentList documents = response.getResults();

        vo.setTotal(documents.getNumFound());
        for (SolrDocument solrDocument : documents) {
            Product product = new Product();
            product.setProduct_id(Long.parseLong(solrDocument.get("id").toString()));
            product.setPic(solrDocument.get("pic").toString().split(",")[0]);
            product.setPrice(new BigDecimal(solrDocument.get("price").toString()).setScale(2));
            product.setSort(Long.parseLong(solrDocument.get("sort").toString()));
            product.setCategory_id(Long.parseLong(solrDocument.get("category_id").toString()));
            product.setCategory_name(solrDocument.get("category_name").toString());
            product.setKeywords(solrDocument.get("keywords").toString());

            List<String> names = highlighting.get(solrDocument.getFieldValue("id").toString()).get("name");
            List<String> subtitle = highlighting.get(solrDocument.getFieldValue("id").toString()).get("sub_title");

            if (names != null) {
                product.setName(names.get(0));
            } else {
                product.setName(solrDocument.get("name").toString());
            }
            if (subtitle != null) {
                product.setSub_title(subtitle.get(0));
            } else {
                product.setSub_title(solrDocument.get("sub_title").toString());
            }

            productList.add(product);
        }
        vo.setProducts(productList);
        return vo;
    }

    //删除
    public void DeleteGoods(List<String> ids) {
        try {
            for (String s : ids) {
                client.deleteByQuery("id:" + s);
            }
            client.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //更新
    public void SaveUpdateGoods(Product product) {
        try {
            SolrInputDocument document = new SolrInputDocument();
            document.addField("id", product.getProduct_id());
            document.addField("price", product.getPrice().toString());
            document.addField("sort", product.getSort());
            document.addField("category_id", product.getCategory_id());
            document.addField("sub_title", product.getSub_title());
            document.addField("keywords", product.getKeywords());
            document.addField("name", product.getName());
            document.addField("pic", product.getPic());
            document.addField("category_name", product.getCategory_name());

            client.add(document);
            client.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

//==========controller==================

    @Resource
    private Service_Search service_search;

    @ApiOperation("QueryGoods分页搜索商品")
    @RequestMapping("/QueryGoods")
    public ResponseCon QueryGoods(int pageStart, int pageSize, String query, String filtration, String interval, String SortField, String sort) {
        try {
            System.out.println("\n搜索参数:size: " + pageStart + ",num: " + pageSize + ",query: " + query + ",filtration: " + filtration + ",interval: " + interval + ",SortField: " + SortField + ",sort: " + sort);
            return new ResponseCon(200, "success", service_search.QueryGoods(pageStart, pageSize, query, filtration, interval, SortField, sort));
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("查询错误");
            return new ResponseCon(401, "error", "查询错误");
        }
    }

不懂多百度吧… windows中配置基本都一样,直接拷贝tomcat的solr下来都能用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值