2019独角兽企业重金招聘Python工程师标准>>>
Solr搜索引擎一般是只会进行增删查,对于Solr的数据结构,可以理解为类似MongoDB的类型的数据库。
与MonogoDB的Schema Free不同。
Solr还是需要自己定义字段,并且做一些设置的。
而Solr一般在修改索引的时候,会选择全量更新,所以一般不会有单条索引的更新操作。
SolrJ添加索引:
public class SolrJAdd {public static void main(String[] args) {String urlString = "http://localhost:8983/solr";SolrServer solr = new HttpSolrServer(urlString);SolrInputDocument document = new SolrInputDocument();document.addField("id", "552199");document.addField("name", "Gouda cheese wheel");document.addField("price", "49.99");document.addField("weight", 147);//add an array field 针对 multivalue字段String[] features = {"yellow","salty","hard"} ;document.addField("features", features);try {UpdateResponse response = solr.add(document);// Remember to commit your changes!solr.commit();System.out.println("commit!");} catch (SolrServerException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
SolrJ删除索引
public class SolrJDelete {public static void main(String[] args) {String urlString = "http://localhost:8983/solr";SolrServer solr = new HttpSolrServer(urlString);try {//删除查询到的索引信息solr.deleteByQuery("id:552199");solr.commit(true, true);System.out.println("delete success!");} catch (SolrServerException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
SolrJ查询索引:
public class SolrJSearcher {public static void main(String[] args) throws SolrServerException {String urlString = "http://localhost:8983/solr";HttpSolrServer solr = new HttpSolrServer(urlString);SolrQuery query = new SolrQuery();//添加查询query.setQuery("cat:music");//添加过滤条件query.addFilterQuery("price:[50 TO 400]");// 排序query.addSort("id", ORDER.asc);// 分页:start开始页,rows每页显示记录条数query.setStart(0);query.setRows(20);// 设置高亮query.setHighlight(true); // 开启高亮组件query.addHighlightField("name");// 高亮字段query.setHighlightSimplePre("");// 标记,高亮关键字前缀query.setHighlightSimplePost("");QueryResponse response = solr.query(query);SolrDocumentList docs = response.getResults();System.out.println("文档个数:" + docs.getNumFound());System.out.println("查询时间:" + response.getQTime());for (SolrDocument doc : docs) {System.out.println(doc.getFieldNames());System.out.println("id: " + doc.getFieldValue("id"));System.out.println("price: " + doc.getFieldValue("price"));System.out.println("name: " + doc.getFieldValue("name"));System.out.println();}}
}
SolrJ Facet查询:
public class SolrJFacetSearch {public static void main(String[] args) {String urlString = "http://localhost:8983/solr";SolrServer solr = new HttpSolrServer(urlString);SolrQuery query = new SolrQuery();//Facet为solr中的层次分类查询//分片信息query.setFacet(true).setQuery("*:*").setFacetMinCount(1).setFacetLimit(5)//段//.setFacetPrefix("electronics", "cat").setFacetPrefix("cor")//查询manu、name中关键字前缀是cor的.addFacetField("manu").addFacetField("name");//分片字段try {QueryResponse response = solr.query(query);// 输出查询结果集SolrDocumentList list = response.getResults();System.out.println("Query result nums: " + list.getNumFound());for (int i = 0; i
}
Refer to:http://www.blogjava.net/hoojo/archive/2011/10/21/361747.html