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