solr踩坑记,全网记录solr问题最全的文章

solr安装就不记录了,网上一搜一大把,我这边记录的是安装后的使用过程中的种种问题。。。。

 

solr安装后启动界面,通过 http://localhost:8983/solr/ 去访问,然后去建一个工程

坑1:装好分词器后,发现扩展分词和停止分词不生效

网上说在这三个文件里面配置,但无论你怎么配置都没用有木有。

后来经过一步步排查发现 

就是你下载的并用到的这个ik包其实已经里面配置了这三个文件,solr主要以这里面的为准,所以无论你外面怎么改都不生效。

坑2:配置定时增量同步数据时的时间错误问题

就是项目目录底下时间不对应,这时候你要去修改配置文件

 

如图:分别对应两个文件,一个Windows,一个Linux

注意:原来是这么写的 REM set SOLR_TIMEZONE=UTC+8,你要根据你dataimport.properties这个文件里面显示的时间区域去设置,比如我这边显示的是GMT时间区域的,我在配置文件里面也相应的改成了GMT+8,然后还要记得把 REM这个去掉,因为REM他是一个注释,不去掉是不生效的。

 

坑3:网上去搜solr的定时任务,配置好之后,不能定时执行

因为配置文件里面

 这个最低的时间范围是一分钟,我当时写了个0.1,想让他几秒钟执行一次,但他不支持小数点,导致定时任务不执行。

另外注意,只有数据库时间有更新的时候才会把最新的更新的时间写入到dataimport.properties这个文件里面,而不是每分钟都会写一次。也要注意自己数据库的时间是否准确,不然会影响同步的。

坑4:增量更新的时候,id要小写。

如图:id如果大写的话,同步数据没问题,但更新或者删除数据(伪删除),不管用,所以要记得id要小写。另外数据库可以设置更新时间这个字段为

这样就可以实时同步数据库的时间

坑5:Java代码里面调用solr的问题

在springboot项目里面配置文件

这样写就行了,网上说的乱七八糟,每个人一套,很乱

在pom文件里面

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-solr</artifactId>
		</dependency>

 

然后在你的Java代码里面

这样去调用就行了,写上自己的solr项目名

注入 

@Autowired
private SolrClient solrClient;

调用代码

public Map<String, Object> test(@ApiParam String q, @ApiParam Integer page, @ApiParam Integer size) throws IOException, SolrServerException {
        SolrQuery params = new SolrQuery();

        // 查询条件
        params.set("q", "商品");
 //       params.setFields("commName");
        // 排序
//        params.addSort("id", SolrQuery.ORDER.desc);

        // 分页
        params.setStart(page);
        params.setRows(size);

        // 默认域
        params.set("df", "commName");

        // 只查询指定域
//        params.set("fl", "id,commName,commDesc");

        // 开启高亮
        params.setHighlight(true);
        // 设置前缀
        params.setHighlightSimplePre("<span style='color:red'>");
        // 设置后缀
        params.setHighlightSimplePost("</span>");

        String baseURL = "http://localhost:8983/solr/mycore";

        // solr数据库是 itaem
        QueryResponse queryResponse = solrClient.query("new_core",params);
        SolrDocumentList results = queryResponse.getResults();
        System.out.println(results.get(0));

        // 数量,分页用
        long total = results.getNumFound();// JS 使用 size=MXA 和 data.length 即可知道长度了(但不合理)

        // 获取高亮显示的结果, 高亮显示的结果和查询结果是分开放的
        Map<String, Map<String, List<String>>> highlight = queryResponse.getHighlighting();
        List<MallCommodity> beans = queryResponse.getBeans(MallCommodity.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("total", total);
        map.put("data", highlight);
        map.put("list", beans);
        return map;

    }

这样就行了。

坑6:用命令增量

网上很多的命令都不行,其实这样调用就行了

http://localhost:8983/solr/new_core/dataimport?command=delta-import
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值