ITKeyword,专注技术干货聚合推荐

注册 | 登录

使用SolrJ管理索引库

标签: solr 索引 管理

相关推荐:管理索引3-显示索引

1.显示表的所有索引在同一张表上可以有多个索引,通过查询数据字典视图dba_indexes 和 user_indexes,可以显示索引信息。其中dba_indexs用于显示数据库所有的索引

使用SolrJ管理索引库一、SolrJ介绍solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图:

依赖的jar包 solr-4.10.3\dist\

二、SolrJ与Java项目整合2.1 导入相应的jar包导入SolrJ需要的jar包还需要导入solr-4.10.3\example\lib\ext2.3 删除索引操作步骤: 1、创建与Solr连接,获取SolrServer对象 2、创建文档对象 SolrInputDocument 3、文档对象中添加相应的域 4、将文档对象添加到索引库 5、提交 示例代码//向索引库中添加索引@Testpublic void addDocument() throws Exception {

//和solr服务器创建连接

//参数:solr服务器的地址

SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");

//创建一个文档对象

SolrInputDocument document = new SolrInputDocument();

//向文档中添加域

//第一个参数:域的名称,域的名称必须是在schema.xml中定义的

//第二个参数:域的值

document.addField("id", "c0001");

document.addField("title_ik", "使用solrJ添加的文档");

document.addField("content_ik", "文档的内容");

document.addField("product_name", "商品名称");

//把document对象添加到索引库中

solrServer.add(document);

//提交修改

solrServer.commit();}2.3 根据id删除索引操作步骤: 1、与Solr连接获取SolrServer对象 2、根据id进行删除、 3、提交 示例代码:@Testpublic void deleteById() throws SolrServerException, IOException{

SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr/");

solrServer.deleteById("c001");

solrServer.commit();}2.4 根据条件删除索引操作步骤: 1、与Solr连接获取SolrServer对象 2、根据条件进行删除、 3、提交 示例代码:查询语法完全支持Lucene的查询语法。//根据查询条件删除文档@Testpublic void deleteDocumentByQuery() throws Exception {

//创建连接

SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");

//根据查询条件删除文档

solrServer.deleteByQuery("id:c001");

//提交修改

solrServer.commit();}2.5 修改索引操作在solrJ中修改没有对应的update方法,只有add方法,只需要添加一条新的文档,和被修改的文档id一致就,可以修改了。本质上就是先删除后添加。2.6 简单查询索引操作步骤: 1、与Solr连接获取SolrServer对象 2、创建查询条件SolrQury对象 3、设置查询条件 4、设置查询结果个数,默认为10 5、执行查询获取QueryResponse对象 6、获取查询结果SolrDocumentList 7、遍历查询结果@Testpublic void baseQuery() throws SolrServerException{

SolrServer solrServer = new HttpSolrServer(url);

//创建查询条件

SolrQuery query = new SolrQuery();

//设置查询条件

query.setQuery("*:*");

//设置查询结果的个数

query.setRows(20);

//执行查询,获取查询相应

QueryResponse response = solrServer.query(query);

//获取查询结果 里面封装了SolrDocument对象

SolrDocumentList solrDocumentList = response.getResults();

System.out.println("查询到的商品数量是:"+solrDocumentList.getNumFound());

for (SolrDocument doc : solrDocumentList) {

System.out.println("-------------");

System.out.println(doc.get("id"));

System.out.println(doc.get("product_name"));

System.out.println(doc.get("product_price"));

}}2.7 复杂查询索引操作需求:查询条件、过滤条件、分页、关键词高亮、排序 API介绍: 1、查询对象 SolrQuery query = new SolrQuery(); 2、设置查询条件 query.setQuery(“product_name:花儿”); 3、设置默认搜索域 query.set(“df”,”product_keywords”); 4、设置排序 query.addSort(“product_price”, ORDER.desc); ORDER.desc降序 ORDER.asc升序 5、设置过滤条件 两种方式 query.addFilterQuery(“域名”,”条件”); query.setFilterQueries(“域名:条件”,”域名:条件”…); 6、设置分页 query.setStart(0);设置开始 (page-1)*pageSize query.setRows(10);设置查询的个数 7、处理高亮 开启高亮 query.setHighlight(true); 设置高亮域 query.addHighlightField(“product_name”); 高亮显示的前缀 query.setHighlightSimplePre(““); 高亮显示的后缀 query.setHighlightSimplePost(““); 获取高亮结果 第一个map的key为id值,value: 第二个map key为域名 value 为数据 MapSolrServer solrServer = new HttpSolrServer(url);

SolrQuery query = new SolrQuery();

//设置查询条件

query.setQuery("product_name:花儿");

//设置过滤

query.setFilterQueries("product_catalog_name:与钟不同");

//设置排序

query.addSort("product_price", ORDER.desc);

//设置默认搜索域

query.set("df","product_keywords");

//处理分页

//设置开始页

query.setStart(0);

query.setRows(10);

//设置每页显示的个数

//设置显示的域

//query.setFields("id","product_name");

//设置高亮

//开启高亮

query.setHighlight(true);

//设置高亮显示的域

query.addHighlightField("product_name");

//设置高亮的前缀

query.setHighlightSimplePre("<span style=\"color:red\">");

//设置高亮的后缀

query.setHighlightSimplePost("</span>");

//执行查询

QueryResponse response = solrServer.query(query);

SolrDocumentList solrDocumentList = response.getResults();

//获取高亮结果 第一个mao的key为id值,value map为域名加数据

Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();

for (SolrDocument doc : solrDocumentList) {

System.out.println("-------------");

System.out.println(doc.get("id"));

System.out.println("普通名称:"+doc.get("product_name"));

System.out.println("高亮显示 :"+highlighting.get(doc.get("id")).get("product_name").get(0));

System.out.println(doc.get("product_price"));

}}三、web项目实现Solr3.1 系统架构3.2 编写查询类 QueryVopublic class QueryVo {

private String queryString;

private String catalog_name;

private String price;

private Integer s

相关推荐:管理索引1-原理介绍

介绍索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o次数,从而提高数据访问性能。创建索引1.单列索引单列索引是基于单个列所建立的索引,比

ort;

public String getQueryString() {

return queryString;

}

public void setQueryString(String queryString) {

this.queryString = queryString;

}

public String getCatalog_name() {

return catalog_name;

}

public void setCatalog_name(String catalog_name) {

this.catalog_name = catalog_name;

}

public Integer getSort() {

return sort;

}

public void setSort(Integer sort) {

this.sort = sort;

}

public String getPrice() {

return price;

}

public void setPrice(String price) {

this.price = price;

}}3.3 使用springmvc框架,spingmvc的配置略springmvc.xml中配置SolrServer<!-- 配置SolrServer对象 --><bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">

<!-- 使用构造函数注值 -->

<constructor-arg index="0" value="http://localhost:8080/solr/"></constructor-arg></bean>3.4 SolrDaoImpl实现类的编写package cn.lx.jd.dao.impl;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.SolrQuery.ORDER;import org.apache.solr.client.solrj.SolrServer;import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import cn.lx.jd.dao.SolrDao;import cn.lx.jd.vo.Product;import cn.lx.jd.vo.QueryVo;@Repositorypublic class SolrDaoImpl

implements SolrDao{

@Autowired

private SolrServer solrServer;

/**

* 根据条件查询商品

* @throws SolrServerException

* */

@Override

public List<Product> findProductByCondition(QueryVo vo) throws SolrServerException {

SolrQuery query = new SolrQuery();

//设置默认搜索域

//query.set("df", "product_keywords");

if(vo.getQueryString() != null && !"".equals(vo.getQueryString().trim())){

query.setQuery("product_name:"+vo.getQueryString());

}else{

query.setQuery("product_name.*");

}

//设置过滤查询

if(vo.getCatalog_name() !=null && !"".equals(vo.getCatalog_name())){

query.addFilterQuery("product_catalog_name:"+vo.getCatalog_name());

}

//设置排序 0价格升序,1价格降序

if(vo.getSort() != null){

if(0 == vo.getSort()){

query.addSort("product_price", ORDER.asc);

}else if(1 == vo.getSort()){

query.addSort("product_price", ORDER.desc);

}

}

//处理查询价格 过滤条件

if(vo.getPrice() != null ){

String[]

price = vo.getPrice().split("-");

if(price.length>1){

query.addFilterQuery("product_price:["+price[0]+" TO "+price[1]+"]");

}

}

//开启高亮

query.setHighlight(true);

//设置高亮域

query.addHighlightField("product_name");

//设置高亮前代码

query.setHighlightSimplePre("<span style=\"color:red\">");

//后置代码

query.setHighlightSimplePost("</span>");

//执行查询

QueryResponse response = solrServer.query(query);

//获取查询结果

SolrDocumentList solrDocumentList = response.getResults();

List<Product> list = new ArrayList<Product>();

if(solrDocumentList.size()>0){

//获取高亮结果

Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();

//处理查询结果

for (SolrDocument doc : solrDocumentList) {

Product p

= new Product();

//进行 赋值

p.setPid((String)doc.get("id"));

p.setCatalog_name((String)doc.get("product_catalog_name"));

p.setPrice((float)doc.get("product_price"));

p.setPicture((String)doc.get("product_picture"));

String name = highlighting.get(doc.get("id")).get("product_name").get(0);

p.setName(name);

list.add(p);

}

}

return list;

}}

$(function () {

$('pre.prettyprint code').each(function () {

var lines = $(this).text().split('\n').length;

var $numbering = $('<ul/>').addClass('pre-numbering').hide();

$(this).addClass('has-numbering').parent().append($numbering);

for (i = 1; i <= lines; i++) {

$numbering.append($('<li/>').text(i));

};

$numbering.fadeIn(1700);

});

});

相关推荐:Elasticsearch 索引管理系列资料

我自己的英文能力不够,阅读了一下dm_vincent这位博主的所翻译的这几篇文章,觉得挺好的,在此链接下:[Elasticsearch] 索引管理 (一):http://blog.csdn

使用SolrJ管理索引库一、SolrJ介绍solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图: 依赖...

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。