solr(2)Solrj

1、创建core

solr的core类似于mysql的表,如下创建名为testcore的core

1
$ bin/solr create -c testcore

2、创建solr连接客户端

1
2
private static final String urlString = "http://192.168.100.27:8983/solr/testcore";
private static SolrClient solr = new HttpSolrClient.Builder(urlString).build();

3、添加/更新索引

1
2
3
4
5
6
7
8
SolrInputDocument doc = new SolrInputDocument();
//默认id为主键,当id存在时更新数据,否则添加数据
doc.addField("id", "3");
doc.addField("name", "hello world test");
doc.addField("age", "1");
doc.addField("addr", "1111");
solr.add(doc);
solr.commit();

4、删除索引

1
2
3
4
5
//通过id删除索引
solr.deleteById("3");
//通过搜索条件删除索引
//solr.deleteByQuery(query);
solr.commit();

5、查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SolrQuery query = new SolrQuery();
// *标示多个任意字符,?标示单个任意字符,~模糊搜索
query.setQuery("*:*"); //全搜索
//query.setQuery("name:你好世?");
//query.setQuery("name:你好我号~"); //搜索相似的结果
//query.setQuery("name:你好我号~0.5"); //搜索相似度为0.5的结果
//query.setQuery("age:[1 TO 3]"); //范围搜索,包括边界
//query.setQuery("age:{0 TO *}"); //范围搜索,不包括边界
//query.setQuery("*:* AND name:*好*"); //组合搜索
//query.setQuery("NOT name:*好*"); //不匹配搜索
//query.setQuery("-name:*好*"); //同NOT
//query.setQuery("+name:hello* OR age:[1 TO 3]"); //+表示该条件必须符合
//query.set("fl", "id","name"); // 只获取字段id,name
//query.set("fl", "id,name"); // 同上,只获取字段id,name
//query.addSort("id", ORDER.desc); //排序

// 分页
query.setStart(0);
query.setRows(10);

QueryResponse queryResponse = solr.query(query);

SolrDocumentList docs = queryResponse.getResults();
Iterator<SolrDocument> iter = docs.iterator();
while(iter.hasNext()){
SolrDocument doc = iter.next();
System.out.println(doc.toString());
}
solr.commit();