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; }
