solr的搜索
主要讲一下solr面板的使用:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。查询
q: 查询用 语法: name:刘中华 支持通配符
? 表示单个任意字符的通配
* 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号)
~ 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam将找到形如foam和roams的单词;roam0.8,检索返回相似度在0.8以上的记录。
AND、|| 布尔操作符
OR、&& 布尔操作符
NOT、!、-(排除操作符不能单独与项使用构成查询)
+ 存在操作符,要求符号”+”后的项必须在文档相应的域中存在²
( ) 用于构成子查询
[] 包含范围检索,如检索某时间段记录,包含头尾,date:[201507 TO 201510]
{} 不包含范围检索,如检索某时间段记录,不包含头尾date:{201507 TO 201510}
fq : filter query 过滤查询 比如:查询日期范围 last_modified:[2019-04-19 TO 2019-04-27]
sort: 排序。格式如下:字段名 排序方式;如 id desc 表示按id字段降序排列查询结果。 中间没有分号 是空格
fl: field list。指定查询结果返回哪些字段。多个时以空格“ ”或逗号“,”分隔。不指定时,默认全返回。
高亮
https://www.jianshu.com/p/cbb938c62e0e
hl: high light 高亮。hl=true表示启用高亮
hl.fl 设定高亮显示的字段,用空格或逗号隔开的字段列表。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用hl.requiredFieldMatch选项。 hl.requireFieldMatch 如果置为true,除非用hl.fl指定了该字段,查询结果才会被高亮。它的默认值是false。 hl.usePhraseHighlighter 如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。 hl.highlightMultiTerm 如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。 hl.fragsize 返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。java API
推荐博客: https://blog.csdn.net/qq_37334135/article/details/76862508
其实就是solrJ的搜索。最底层的都是他,无论是 spring-boot-starter-data-solr 还是 spring-data-solr 都是这个solrJ的封装。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>
spring: datasource: data: solr: host: http://127.0.0.1:8983/solr/
根据id搜索
@Autowired private SolrClient client; //根据id查找 @RequestMapping("/") public Object testSolr() throws IOException, SolrServerException { SolrDocument document = client.getById("test", "2"); System.out.println(document); return document; }
带条件查询
@RequestMapping("/list")
public Object query() throws Exception {
SolrQuery query = new SolrQuery();
query.set("q", "id:3");
QueryResponse response = solrClient.query("test", query);
SolrDocumentList results = response.getResults();
return results;
}
新增
@RequestMapping("/add")
public Object add() throws Exception {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", 1002L);
document.addField("item_brand", "三星");
document.addField("item_goodsid", "66666");
document.addField("item_seller", "三星旗舰店");
document.addField("item_title", "三星千元机震撼来袭");
document.addField("item_category", "手机");
document.addField("item_price", "1499");
document.addField("item_image", "http://xiaomi.jpg");
document.addField("last_modified", "2019-04-22");
UpdateResponse add = solrClient.add("test",document);
int status = add.getStatus();
solrClient.commit("test");
return status;
}

