精华内容
下载资源
问答
  • java操作solr

    2020-01-14 14:06:14
    创建solr业务字段相对应字段的实体对象,@field要与solr的字段相同 import org.apache.solr.client.solrj.beans.Field; public class Product { @Field(value = "id") private String id; @Field(value =...

    pom引入依赖

     <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.1.1</version>
    </dependency>

    创建solr业务字段相对应字段的实体对象,@field要与solr的字段相同

    
    import org.apache.solr.client.solrj.beans.Field;
    
    public class Product {
        @Field(value = "id")
        private String id;
    
        @Field(value = "con_name")
        private String name;
    
        @Field(value = "image")
        private String image;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getImage() {
            return image;
        }
    
        public void setImage(String image) {
            this.image = image;
        }
    }

    创建SolrUtil工具类

    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.apache.solr.client.solrj.impl.HttpSolrClient;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.common.SolrDocument;
    import org.apache.solr.common.SolrDocumentList;
    import org.apache.solr.common.SolrInputDocument;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.io.IOException;
    import java.util.List;
    
    public  class SolrUtil<T> {
        //solr服务器所在的地址,core1为自己创建的文档库目录
        private final static String SOLR_URL = "http://192.168.204.133:8080/solr/core1";
    
        /**
         * 获取客户端的连接
         *
         * @return
         */
        public HttpSolrClient createSolrServer() {
            HttpSolrClient solr = null;
            solr = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
            return solr;
        }
    
        /**
         * 往索引库添加文档
         *
         * @throws SolrServerException
         * @throws IOException
         */
        public void addDoc(Product product) throws SolrServerException, IOException {
            SolrInputDocument document = new SolrInputDocument();
            product.setId(product.getId());
           product.setImage(product.getImage());
            product.setName(product.getName());
            //如果没有创建实体对象也可以这样写
    //        document.addField("id", "902");
    //        document.addField("con_name", "中国人");
    //        document.addField("image", "http://192.168.11.12/image/dd.png");
            HttpSolrClient solr = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000)
                    .withSocketTimeout(60000).build();
            solr.addBean(product);
           // solr.add(document);
            solr.commit();
            solr.close();
            System.out.println("添加成功");
        }
    
        /**
         * 根据ID从索引库删除文档
         *
         * @throws SolrServerException
         * @throws IOException
         */
        public void deleteDocumentById(String id) throws SolrServerException, IOException {
            HttpSolrClient server = new HttpSolrClient.Builder(SOLR_URL)
                    .withConnectionTimeout(10000)
                    .withSocketTimeout(60000).build();
    
            server.deleteById(id);
            server.commit();
            server.close();
        }
    
        /**
         * 根据设定的查询条件进行文档字段的查询
         * @throws Exception
         */
        public List<T> querySolr(Class<T> tClass,String con_name) throws Exception {
            HttpSolrClient server = new HttpSolrClient.Builder(SOLR_URL)
                    .withConnectionTimeout(10000)
                    .withSocketTimeout(60000).build();
            SolrQuery query = new SolrQuery();
    
            //下面设置solr查询参数
           query.set("q", "*:*");// 参数q  查询所有
            //参数fq, 给query增加过滤查询条件,可添加多个fq
           query.addFacetQuery("id:[0 TO *]");
          query.addFilterQuery("con_name:*"+con_name+"*");
            //参数df,给query设置默认搜索域,从哪个字段上查找
            query.set("df", "con_name");
    
            //参数sort,设置返回结果的排序规则
            query.setSort("id",SolrQuery.ORDER.desc);
            //设置分页参数
            query.setStart(0);
            query.setRows(10);
    
            //设置高亮显示以及结果的样式
            query.setHighlight(true);
            query.addHighlightField("name");
            query.setHighlightSimplePre("<font color='red'>");
            query.setHighlightSimplePost("</font>");
    
            //执行查询
            QueryResponse response = server.query(query);
            //获取返回结果
            SolrDocumentList resultList = response.getResults();
            for(SolrDocument document: resultList){
                System.out.println("id:"+document.get("id")+"   document:"+document.get("con_name")+"    description:"+document.get("image"));
            }
            //获取实体对象形式
            List<T> persons = response.getBeans(tClass);
          return (List<T>) persons;
        }
    
      //测试
        public static void main(String[] args) throws Exception {
            SolrUtil solr = new SolrUtil();
       //solr.addDoc();
        solr.querySolr(Product.class,"学");
        }
    
    }

    展开全文
  • java 操作solr

    千次阅读 2016-05-01 18:54:58
    public class SolrCloudTest { @Test public void testAddDocument() throws Exception { ...// HttpSolrServer solrServer = new HttpSolrServer("http://192.168.1.104:8080/solr"); // // 创建一个文档对
    public class SolrCloudTest {
    
    	@Test
    	public void testAddDocument() throws Exception {
    		// 创建单机版连接
    //		HttpSolrServer solrServer = new HttpSolrServer("http://192.168.1.104:8080/solr");
    //		// 创建一个文档对象
    //		SolrInputDocument document = new SolrInputDocument();
    //		// 向文档中添加域
    //		document.addField("id", "test");
    //		document.addField("item_title", "测试");
    //		// 把文档添加到索引库
    //		solrServer.add(document);
    //		// 提交
    //		solrServer.commit();
    
    		// 创建一个和solr集群的连接
    		// 参数就是zookeeper的地址列表,使用逗号分隔
    		String zkHost = "192.168.1.103:2181,192.168.1.103:2182,192.168.1.103:2183";
    
    		CloudSolrServer solrServer = new CloudSolrServer(zkHost);
    		// 设置默认的collection
    		solrServer.setDefaultCollection("collection2");
    		// 创建一个文档对象
    		SolrInputDocument document = new SolrInputDocument();
    		// 向文档中添加域
    		document.addField("id", "test");
    		document.addField("item_title", "测试");
    		// 把文档添加到索引库
    		solrServer.add(document);
    		// 提交
    		solrServer.commit();
    	}
    
    	@Test
    	public void deleteAddDocument() throws Exception {
    		// 创建一个和solr集群的连接
    		// 参数就是zookeeper的地址列表,使用逗号分隔
    		String zkHost = "192.168.1.103:2181,192.168.1.103:2182,192.168.1.103:2183";
    		CloudSolrServer solrServer = new CloudSolrServer(zkHost);
    		// 设置默认的collection
    		solrServer.setDefaultCollection("collection2");
    
    		solrServer.deleteByQuery("*:*");
    		// 提交
    		solrServer.commit();
    	}

    spring+solr

    spring-solr.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    	http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    
    	
    	<!-- 配置SolrServer对象 -->
    	<!--  单机版-->
    	<!-- <bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
    	   <constructor-arg name="baseURL" value="${SOLR.SERVER.URL}"></constructor-arg>
    	</bean> -->
    	<!-- 集群版 -->
    	<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
    	   <constructor-arg name="zkHost" value="192.168.1.103:2181,192.168.1.103:2182,192.168.1.103:2183"></constructor-arg>
    	   <property name="defaultCollection" value="collection2"></property>
    	</bean>
    </beans>


    Dao

    public interface SearchDao {
      SearchResult search(SolrQuery query)throws Exception;
    }

    @Repository
    public class SearchDaoImpl implements SearchDao{
    
    	@Autowired
    	private SolrServer solrServer;
    	@Override
    	public SearchResult search(SolrQuery query) throws Exception {
    		//返回值对象
    		SearchResult result = new SearchResult();
    		//根据查询条件查询索库
    		QueryResponse response = solrServer.query(query);
    		//取出查询结果
    		SolrDocumentList solrDocumentList = response.getResults();
    		//取查询总数量
    		result.setRecordCount(solrDocumentList.getNumFound());
    		//商品列表
    		List<Item> itemList = new ArrayList<>();
    		//取高亮显示
    		Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
    		
    		//取商品列表
    		for (SolrDocument solrDocument : solrDocumentList) {
    		   //创建一个商品对象
    			Item item = new Item();
    			item.setId((String)solrDocument.get("id"));
    			//取高亮显示的结果
    			List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
    			String title ="";
    			if(list!=null && list.size()>0){
    				title=list.get(0);
    			}else{
    				title =(String)solrDocument.get("item_title");
    			}
    			item.setTitle(title);
    			item.setImage((String) solrDocument.get("item_image"));
    			item.setPrice((long) solrDocument.get("item_price"));
    			item.setSell_point((String) solrDocument.get("item_sell_point"));
    			item.setCategory_name((String) solrDocument.get("item_category_name"));
    			//添加的商品列表
    			itemList.add(item);
    		}
    		result.setItemList(itemList);
    		return result;
    	}
    
    }
    

    service

    public interface SearchService {
    	SearchResult search(String queryString,int page,int rows)throws Exception;
    }

    @Service
    public class SearchServiceImpl implements SearchService{
    
    	@Autowired
    	private SearchDao searchDao;
    	@Override
    	public SearchResult search(String queryString, int page, int rows) throws Exception {
    		//创建查询对象
    		SolrQuery query = new SolrQuery();
    		//设置查询条件
    		query.setQuery(queryString);
    		//设置分页
    		query.setStart((page-1)*rows);
    		query.setRows(rows);
    		//设置默认搜索域
    		query.set("df", "item_keywords");
    		//设置高亮显示
    		query.setHighlight(true);
    		query.addHighlightField("item_title");
    		query.setHighlightSimplePre("<em style=\"color:red\">");
    		query.setHighlightSimplePost("</em>");
    
    		//执行查询
    		SearchResult searchResult = searchDao.search(query);
    		//计算查询结果总页数
    		long recordCount = searchResult.getRecordCount();
    		long pageCount = recordCount/rows;
    		if(recordCount%rows>0){
    			pageCount++;
    		}
    		searchResult.setPageCount(pageCount);
    		searchResult.setCurPage(page);
    		return searchResult;
    	}
    
    }
    
    
    public class SearchResult {
        //商品列表
    	private List<Item> itemList;
    	//总记录
    	private  long  recordCount;
    	//总页数
    	private long pageCount;
    	//当前页
    	private long curPage;
    	public List<Item> getItemList() {
    		return itemList;
    	}
    	public void setItemList(List<Item> itemList) {
    		this.itemList = itemList;
    	}
    	public long getRecordCount() {
    		return recordCount;
    	}
    	public void setRecordCount(long recordCount) {
    		this.recordCount = recordCount;
    	}
    	public long getPageCount() {
    		return pageCount;
    	}
    	public void setPageCount(long pageCount) {
    		this.pageCount = pageCount;
    	}
    	public long getCurPage() {
    		return curPage;
    	}
    	public void setCurPage(long curPage) {
    		this.curPage = curPage;
    	}
    	
    	
    }
    



    @Autowired
    	private SolrServer solrServer;
    
    	@Override
    	public Result importAllItems() {
    		try {
    			// 查询商品列表
    			List<Item> itemList = itemMapper.getItemList();
    			// 把商品信息写入索引库
    			for (Item item : itemList) {
    				// 创建一个SolrInputDocument对象
    				SolrInputDocument document = new SolrInputDocument();
    				document.setField("id", item.getId());
    				document.setField("item_title", item.getTitle());
    				document.setField("item_sell_point", item.getSell_point());
    				document.setField("item_price", item.getPrice());
    				document.setField("item_image", item.getImage());
    				document.setField("item_category_name", item.getCategory_name());
    				document.setField("item_desc", item.getItem_des());
    				// 写入索引库
    
    				solrServer.add(document);
    			}
    			//提交修改
    			solrServer.commit();
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
    		}
    		return Result.ok();
    	}


     
    展开全文
  • 此资源包,包含Java操作Solr的所有外部依赖包,整合到了一起,方便大家使用!都是最新版本的jar包。
  • 使用JAVA操作solr

    2021-03-30 09:17:29
    这样环境说明已安装,我们为了使用java操作solr,我们需要建立一个core,因为我们的数据全部存储在core中,有点类似数据库的概念。 我们可以使用命令来创建core,也可以使用浏览器发送请求来新增。 我们取名为mycore...

    首先需要搭建一个solr环境,在此,我使用docker安装一个solr

    docker pull solr
    docker run --name my_solr -d -p 8983:8983 -t solr
    

    访问web控制台http://ip:8983
    这样环境说明已安装,我们为了使用java操作solr,我们需要建立一个core,因为我们的数据全部存储在core中,有点类似数据库的概念。
    我们可以使用命令来创建core,也可以使用浏览器发送请求来新增。

    我们取名为mycore

    docker exec -it --user=solr my_solr bin/solr create_core -c mycore
    

    在这里插入图片描述

    或者使用浏览器方式
    http://192.168.37.129:8983/solr/admin/cores?action=CREATE&name=mycore&instanceDir=mycore

    如下可以看到collection中的mycore
    在这里插入图片描述
    我们添加一点测试数据
    在这里插入图片描述
    查询下:
    在这里插入图片描述
    作为开发人员,你必须学会这种界面操作,以下是界面的各种简称含义。
    fq表示filter query 过滤条件 和q是and的关系支持各种逻辑运算符 (参考https://cwiki.apache.org/confluence/display/solr/The+Standard+Query+Parser)
    sort表示排序 的字段 字段名 asc|desc
    start 表示从第几行开始 rows表示查询的总行数
    fl表示查询显示的列 比如只需要查询 name_s,sex_i 这两列 使用,隔开
    df表示默认的查询字段 一般不设置
    Raw Query Parameters表示原始查询字段 可以使用 start=0&rows=10这种url的方式传入参数
    wt(write type)表示写入的格式 可以使用json和xml
    shards 多核同时搜索 solrhome拷贝mycore为mycore1 管理平台添加core 设置参数为 路径,路径来设置需要搜索的核

    java操作solr

    新建maven项目,引入pom依赖

    <dependency>
    	<groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>7.2.1</version>
    </dependency>
    

    我们测试索引的CRUD,为了配合,我们新建实体类Person

    package com.hbk.entity;
    
    import org.apache.solr.client.solrj.beans.Field;
    
    public class Person {
        @Field(value = "id")
        private String id;
    
        @Field(value = "name")
        private String name;
    
        @Field(value = "description")
        private String description;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    }
    
    

    我们的工具类SolrUtil

    package com.hbk.util;
    
    import com.hbk.entity.Person;
    import org.apache.solr.client.solrj.SolrQuery;
    import org.apache.solr.client.solrj.SolrServerException;
    import org.apache.solr.client.solrj.impl.HttpSolrClient;
    import org.apache.solr.client.solrj.response.QueryResponse;
    import org.apache.solr.common.SolrDocument;
    import org.apache.solr.common.SolrDocumentList;
    import org.apache.solr.common.SolrInputDocument;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.util.List;
    import java.util.Map;
    
    public class SolrUtil {
        //solr服务器所在的地址,mycore为自己创建的文档库目录
        private final static String SOLR_URL = "http://192.168.37.129:8983/solr/mycore";
    
        /**
         * 往索引库添加文档
         *
         * @throws SolrServerException
         * @throws IOException
         */
        @Test
        public void addDoc() throws SolrServerException, IOException {
            SolrInputDocument document = new SolrInputDocument();
            document.addField("id", "001");
            document.addField("name", "黄宝康");
            document.addField("description", "IT程序员多年,微信:19979454223,欢迎有项目合作");
            HttpSolrClient solr = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000)
                    .withSocketTimeout(60000).build();
            solr.add(document);
            solr.commit();
            solr.close();
            System.out.println("添加成功");
        }
    
        /**
         * 根据ID从索引库删除文档
         *
         * @throws SolrServerException
         * @throws IOException
         */
        public void deleteDocumentById() throws SolrServerException, IOException {
            HttpSolrClient server = new HttpSolrClient.Builder(SOLR_URL)
                    .withConnectionTimeout(10000)
                    .withSocketTimeout(60000).build();
    
            server.deleteById("001");
            server.commit();
            server.close();
        }
    
      @Test
        public void querySolr() throws Exception {
    
            HttpSolrClient server = new HttpSolrClient.Builder(SOLR_URL)
                    .withConnectionTimeout(10000)
                    .withSocketTimeout(60000).build();
            SolrQuery query = new SolrQuery();
    
            //下面设置solr查询参数
    
    //        query.set("q", "*:*");// 参数q  查询所有
            query.set("q", "黄宝康");//相关查询,比如某条数据某个字段含有周、星、驰三个字  将会查询出来 ,这个作用适用于联想查询
            //参数fq, 给query增加过滤查询条件
            query.addFacetQuery("id:[0 TO 9]");
    //        query.addFilterQuery("description:微信");
    
            //参数df,给query设置默认搜索域,从哪个字段上查找,这个结合上面的q
            query.set("df", "name");
            //参数sort,设置返回结果的排序规则
            query.setSort("id", SolrQuery.ORDER.desc);
    
            //设置分页参数
            query.setStart(0);
            query.setRows(10);
    
            //设置高亮显示以及结果的样式
            query.setHighlight(true);
            query.addHighlightField("name");
            query.setHighlightSimplePre("<font color='red'>");
            query.setHighlightSimplePost("</font>");
    
            //执行查询
            QueryResponse response = server.query(query);
    
            //获取返回结果
            SolrDocumentList resultList = response.getResults();
    
            for(SolrDocument document: resultList){
                System.out.println("id:"+document.get("id")+"   document:"+document.get("name")+"    description:"+document.get("description"));
            }
            // 获取高亮
            Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
            for (Map.Entry entry : highlighting.entrySet()){
                System.out.println(entry.getKey());
                System.out.println(entry.getValue());
            }
            //获取实体对象形式
            List<Person> persons = response.getBeans(Person.class);
            System.out.println(persons.get(0).getName());
    
        }
    }
    
    

    一开始跑的时候,报了如下错
    在这里插入图片描述
    原因是,name字段的索引类型问题,可以看到,带了中括号
    在这里插入图片描述
    我们修改下数据类型
    进入docker容器,查看/var/solr/data/mycore/conf/managed-schema文件,
    把text_general成string,并reload下解决问题。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    博客若对你有用,欢迎扫码打赏,你的打赏是我写作的动力。
    在这里插入图片描述

    展开全文
  • 下面小编就为大家分享一篇java操作solr实现查询功能的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Solr基础及java操作solr例子

    千次阅读 2018-10-22 19:54:02
    三、java操作solr例子 一、基本概念 因为Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。 通过对Solr 进行适当的配置,某些情况...

    一、基本概念

    二、solr索引操作

    三、java操作solr例子

    一、基本概念

    因为Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。

    通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。例如,Field 可以包含字符串、数字、布尔值或者日期,也可以包含你想添加的任何类型,只需用在solr的配置文件中进行相应的配置即可。Field 可以使用大量的选项来描述,这些选项告诉 Solr 在索引和搜索期间如何处理内容。

    属性名称

    描述

    Indexed

    Indexed Field 可以进行搜索和排序。你还可以在 indexed Field 上运行 Solr 分析过程,此过程可修改内容以改进或更改结果。

    Stored

    stored Field 内容保存在索引中。这对于检索和醒目显示内容很有用,但对于实际搜索则不是必需的。例如,很多应用程序存储指向内容位置的指针而不是存储实际的文件内容。

    通过indexed=true可以使得一个field可以被搜索,如果你有一个字段title设置的是indexed=true,那么q=title:csdn就是在搜索标题中含有csdn的document。如果你设置indexed=false,就算你有符合的数据也无法搜索出来。 

    stored=true意味着你可以在结果中看到这个field,通过fl参数可以控制是否在结果中显示,如果你设置stored=false,就算你有符合的数据看不到该field。

    二、solr索引操作

    在Solr中,通过向部署在servlet容器中的Solr

    Web应用程序发送HTTP请求来启动索引和搜索。Solr接受请求,确定要使用的适当SolrRequestHandler,然后处理请求。通过HTTP以同样的方式返回响应。默认配置返回Solr的标准XML响应。你也可以配置Solr的备用响应格式,如json、csv格式的文本。

    索引就是接受输入元数据(数据格式在schema.xml中进行配置)并将它们传递给Solr,从而在HTTP

    Post XML 消息中进行索引的过程。你可以向Solr索引servlet传递四个不同的索引请求:

    add/update允许您向Solr添加文档或更新文档。直到提交后才能搜索到这些添加和更新。

    commit告诉Solr,应该使上次提交以来所做的所有更改都可以搜索到。

    optimize重构Lucene的文件以改进搜索性能。索引完成后执行一下优化通常比较好。如果更新比较频繁,则应该在使用率较低的时候安排优化。一个索引无需优化也可以正常地运行。优化是一个耗时较多的过程。

    delete可以通过id或查询来指定。按id删除将删除具有指定id的文档;按查询删除将删除查询返回的所有文档。

    Lucene中操作索引也有这几个步骤,但是没有更新。Lucene更新是先删除,然后添加索引。因为更新索引在一定情况下,效率没有先删除后添加的效率好。

    上面有提到schema.xml这个配置,这个配置可以在你下载solr包的安装解压目录的solr-5.3.2/example/example-DIH/solr/solr/conf中找到,它就是solr模式关联的文件。打开这个配置文件,你会发现有详细的注释。

    模式组织主要分为三个重要配置

    types 部分是一些常见的可重用定义,定义了 Solr(和 Lucene)如何处理 Field。也就是添加到索引中的xml文件属性中的类型,如int、text、date等

    fileds是你添加到索引文件中出现的属性名称,而声明类型就需要用到上面的types

    其他配置有

    uniqueKey 唯一键,这里配置的是上面出现的fileds,一般是id、url等不重复的。在更新、删除的时候可以用到。

     

    三、java操作solr例子例子(下载地址

    我们知道如果想要使数据加入到Solr服务器中,在schema.xml必须要存在与其对应的Filed标签声明,如果我们要添加一个对象(比如商品对象)每次去一个一个的setFiled,这样比较麻烦,Solr允许使用javaBean的方式,将一个对象之间保存到solr服务器中。

    思路:

    1、首先在schema.xml中定义自己的Product对象的具体字段

    2.、然后在java中建立实体对象,并且一定要在属性或set方法上添加@Field(nameValue)注解。(org.apache.solr.client.solrj.beans.Field)

    3、最后我们在junit里面测试。

     

    首先java中建立实体对象

    我在org.springframework.data.solr.example.model创建了一个Product类

    里面的@Field(nameValue)中的nameValue需要和schema.xml的有具体的field与之对应(如果字段不对应会报unknown field 'xxx')

    package org.springframework.data.solr.example.model;
    
    import java.util.List;
    
    import org.apache.solr.client.solrj.beans.Field;
    
    
    public class Product implements SearchableProduct {
    
      @Field(ID_FIELD)
      private String id;
    
      @Field(NAME_FIELD)
      private String name;
    
      @Field(CATEGORY_FIELD)
      private List<String> categories;
    
      @Field(WEIGHT_FIELD)
      private Float weight;
    
      @Field(PRICE_FIELD)
      private Float price;
    
      @Field(POPULARITY_FIELD)
      private Integer popularity;
    
      @Field(AVAILABLE_FIELD)
      private boolean available;
    
      public String getId() {
        return id;
      }
    
      public void setId(String id) {
        this.id = id;
      }
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public List<String> getCategories() {
        return categories;
      }
    
      public void setCategories(List<String> categories) {
        this.categories = categories;
      }
    
      public Float getWeight() {
        return weight;
      }
    
      public void setWeight(Float weight) {
        this.weight = weight;
      }
    
      public Float getPrice() {
        return price;
      }
    
      public void setPrice(Float price) {
        this.price = price;
      }
    
      public Integer getPopularity() {
        return popularity;
      }
    
      public void setPopularity(Integer popularity) {
        this.popularity = popularity;
      }
    
      public boolean isAvailable() {
        return available;
      }
    
      public void setAvailable(boolean available) {
        this.available = available;
      }
    
      @Override
      public String toString() {
        return "Product [id=" + id + ", name=" + name + ", categories=" + categories + ", weight=" + weight + ", price=" + price + ", popularity=" + popularity + ", available=" + available + "]";
      }
    
    }
    

    2、测试

    1、这里首先创建了10个商品

    2、通过findByPopularity方法查询对象

    最后在@After注解下的tearDown方法将对象删除

     

    package org.springframework.data.solr.example;
    
    import java.util.List;
    
    import org.junit.After;
    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.Page;
    import org.springframework.data.solr.core.query.result.FacetFieldEntry;
    import org.springframework.data.solr.core.query.result.FacetPage;
    import org.springframework.data.solr.example.model.Product;
    import org.springframework.data.solr.example.repository.SolrProductRepository;
    import org.springframework.data.solr.example.repository.SolrSearchableFields;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration("classpath:org/springframework/data/solr/example/applicationContext.xml")
    public class ITestSolrProductRepository extends AbstractSolrIntegrationTest {
    
    	@Autowired
    	SolrProductRepository repo;
    
    	@After
    	public void tearDown() {
    		repo.deleteAll();
    	}
    
    	 
    	@Test
    	public void testQuery() {
    		Assert.assertEquals(0, repo.count());
    
    		List<Product> baseList = createProductList(10);
    		repo.save(baseList);
    
    		Assert.assertEquals(baseList.size(), repo.count());
    
    		Page<Product> popularProducts = repo.findByPopularity(20);
    		Assert.assertEquals(1, popularProducts.getTotalElements());
    
    		Assert.assertEquals("2", popularProducts.getContent().get(0).getId());
    	}
    
    	 
    
    }
    

     

     

     

     

    展开全文
  • java操作solr示例1. 添加pom.xml2.描述文档3.创建SolrServer对象4.往索引库添加文档5.根据id从索引库删除文档6.solr查询文档7.转换为json格式输出8.main()函数9.指定服务器地址 首先看一下我的示例idea目录:...
  • java操作solr的jar

    2017-01-09 22:43:06
    solr的jar
  • java操作solr基本方法

    千次阅读 2018-09-09 16:01:06
    继上一篇在linux环境下搭建成功solr服务器之后,本篇讲述如何在java程序中对solr进行基本的API使用和操作, 启动solr服务器后,进入solr的可视化管控台 1、新建maven工程,创建过程略过, pom文件添加依赖的...
  • 继上一篇,solr启动成功后,使用java来简单操作solr的数据,也就是solr中的Document。 首先我们创建一个core来用于测试,创建core的方式见博文 Apache solr入门中的创建core章节。 这里我们创建一个test_core用于...
  • 使用java操作solr 前面讲了很多对solr的操作都是直接在页面上操作的,实际工作中肯定是要使用java进行操作的,在这我们就看一下如何使用java来操作solr Solr提供了solrj来使用java操作solr,SolrJ是封装了...
  • 一般来说 操作solr 有两种方式,一:是 http rest 方式,二:Java 操作 solrj ,这里我们都是通过Java的 作为solr 的客户端去操作; 创建索引 第一种添加方式,通过添加Field创建索引文档 使用addField添加索引域...
  • Java 操作Solr搭建高性能搜索引擎

    千次阅读 2017-11-17 17:24:32
    目前比较适合Java的搜索引擎搭建一般会选用Solr,底层操作会使用Solrj交互,其实Solr也是基于Lucene。实施过程中发现网上很多关于Java集成Solr的文档都是基于Solr5+版本的,而对于Solr7+版本的文档很少,并且很多都...
  • package com.wang.solr.utils...import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import...
  • /** * solr查询方法 * @param client solr客户端 * @param query solr查询对象 * @return list集合 * @throws SolrServerException * @throws IOException */ public static List<Map<Strin...
  • solr<三> Java 操作 solr query + facet

    千次阅读 2017-06-06 22:53:47
    //Facet为solr中的层次分类查询 try { query.setFacet(true); query.setQuery("*:*"); query.setFacetPrefix(prefix); query.addFacetField("title"); rsp = solr.query(query); } catch (Exception e) { /...
  • java 操作solr api实例 非http请求方式

    千次阅读 2011-09-16 15:25:02
    第一步:在tomcat的conf目录下新建Catalina目录,在Catalina目录下新建localhost目录,在localhost目录下新建solr.xml  solr.xml内信息如下:  Java代码  "/Volumes/mac

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,664
精华内容 7,865
关键字:

java操作solr

java 订阅