搜索引擎solr(二)--查询语句及在java中进行增删改查

一、简介

这里,先介绍solr查询的基本语法,然后介绍基于solr的java客户端SolrJ,对solr进行增删改查的操作。

二、solr查询基本语法

1、查询布尔逻辑

符号"AND":表示两边的条件必须满足,如 stu_name:刘邦 AND id:2

符号"+":表示后面的条件必须满足,如 +stu_name:刘邦

符号"OR":表示两边的条件满足其一即可,如 stu_name:刘邦 OR id:1 (注意:"OR"在查询词间是默认配置,因此,前面查询也可写成stu_name:刘邦  id:1)

符号"NOT"或"-":表示后面匹配的文档不能出现,如 stu_name:刘*  NOT id:1 (或者写为:stu_name:刘*  -id:1)

上述条件可以自由组合,可使用括号分组。

2、模糊匹配

符号"*":表示匹配0个或多个字符,如 stu_name:刘*

符号"?":表示匹配一个字符,如 stu_name:刘?

3、区间查询

符号"TO":表示范围,从哪到哪,如 create_time:[2017-09-23T00:00:00Z TO 2017-09-25T23:59:59Z]

方括号"[]":表示包含边界值查询,如 create_time:[2017-09-23T00:00:00Z TO 2017-09-25T23:59:59Z]

大括号"{}":表示不包含边界值查询,如 create_time:{2017-09-23T00:00:00Z TO 2017-09-25T23:59:59Z}

上述括号可自由组合。

4、模糊距离查询

模糊距离查询可用于解决用户拼写错误的问题。

符号"~": 表示模糊距离查询,后可跟数据,指出距离,如 stu_name: 刘~1 (或stu_name: 刘~)

以上就是solr的基本查询。

三、在java中solr增删改查

在java中,可以使用solr的java客户端solrJ进行操作。开发步骤如下:

1、添加maven依赖:


    org.apache.solr
    solr-solrj
    7.2.0
2、示例代码(直接上代码,解释见注释)

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;

import java.util.Date;
public class SolrMain {
    public static void main(String[] args) throws Exception {
        //创建连接客户端,参数是solr的连接地址,stu表示要连接的core
        SolrClient client = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/stu").build();

        //创建或更新(操作是一样的,若存在,则更新,若没有,则插入)
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", 1);
        doc.addField("stu_id", "001");
        doc.addField("stu_name", "china");
        doc.addField("create_time", new Date());
        client.add(doc);
        client.commit();

        //删除(方式一:基于查询)
        client.deleteByQuery("stu_name:china");
        //删除(方式二:基于唯一id)
//        client.deleteById("6");
        client.commit();

        //查询
        SolrQuery query = new SolrQuery()
                .setQuery("stu_name:刘*")  //指定查询语句
                .addSort("id", SolrQuery.ORDER.desc)  //指定排序方式
                .setStart(0)   //结果返回,从指定位置开始
                .setRows(2);  //结果返回,指定个数
        QueryResponse response = client.query(query);
        //查询结果,通过result.getNumFound()可获取在solr中匹配到的数量
        SolrDocumentList result = response.getResults();
        System.out.println(result);
    }
}
具体更多的solr操作,可以直接查看solrJ包中的源码







你可能感兴趣的:(搜索)