欢迎投稿

今日深度:

solr,

solr,


solr配置文件

1. solrConfig.xml : solr核心配置文件

2. schema.xml : solr约束文件

<!--第一种标签为 field标签: 主要是用来指定字段名称的, Lucene中是有用户在程序中指定, solr中需要提前在配置文件中指定-->	
		<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
			<!--name: 字段的名称
			type: 字段的类型
			indexed: 是否索引
			stored: 是否保存
			multiValued: 是否多值, 这个字段, 类似存储一个数组  
		这里有两个不允许删除的: 一个是 _version__ 一个是  _root__  这两个是solr内部需要使用的字段
		
		有一个字段的名称必须为id,其类型都不允许进行修改 原因是id字段已经被主键使用uniqueKey  
		其余的是一些初始化好的字段
	-->	
	<!--第二种标签为dynamicField, 被称为是动态域	-->	
	<dynamicField name="*_is" type="int"    indexed="true"  stored="true"  multiValued="true"/>
		<!--此种标签是为程序的扩展所使用的, 因为我们不可能把所有的字段全部定义好, 所以就需要动态域来进行动态扩展-->	
	
	
	<!--第三种标签为 uniqueKey:  必要标签, 表名文档的唯一属性, 一般默认为id-->	
		<uniqueKey>id</uniqueKey>
		<!--Lucene中是自己进行维护, solr中, 需要自己指定-->	
	
	<!--第四种标签为 copyField: 被称为是复制域-->	
	<copyField source="cat" dest="text"/>
		<!--source: 表名要复制那个字段的值
		dest: 复制到那个字段上
		
		此种标签主要是为了查询所使用的,
		例如, 当查询Text字段的时候, 实质上相当于查询title和name两个字段-->	
	
	<!--第五种标签: fieldType   字段类型定义标签-->	
		<fieldType name="managed_en" class="solr.TextField" positionIncrementGap="100">
		  <analyzer>
			<tokenizer class="solr.StandardTokenizerFactory"/>
			<filter class="solr.ManagedStopFilterFactory" managed="english" />
			<filter class="solr.ManagedSynonymFilterFactory" managed="english" />
		  </analyzer>
		</fieldType>
		
   <!--此种标签是用来定义字段的类型的,可以指定此字段使用何种分词器进行分词-->	

solrj

1. 增

写入document对象

    // 写入索引
    @Test
    public void createIndexToSolr() throws IOException, SolrServerException {
        //1. solrj的服务对象
        //http://localhost:8080/solr/collection1  连接solr中collection1索引库的接口路径
        SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");

        //2. 添加document文档
        SolrInputDocument doc = new SolrInputDocument();
        //定义个文档的时候, id字段必须定义, 因为solr是需要程序员自己维护的
        doc.addField("id","1");

        doc.addField("title","solr是一个企业级的搜索应用服务器");
        doc.addField("content","solr是一个独立的企业级搜索应用服务器, 用户可以通过http请求访问这个服务器, 获取或者写入对应的内容, 其底层是Lucene");

        solrServer.add(doc);

        //3. 提交文档(发送请求的操作)
        solrServer.commit();
    }	
    

写入javabean

// 使用javaBean添加索引
    @Test
    public void createIndexJavaBeanToSolr() throws IOException, SolrServerException {
        //1. 创建solrj的服务对象
        SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");

        //2. 添加javaBean的信息
        Product product = new Product();
        product.setId("8");
        product.setTitle("壹万贰");
        product.setName("iphoneXsMax");
        product.setContent("就是有钱, 没办法");

        solrServer.addBean(product);

        //3. 提交
        solrServer.commit();

    }

2. 删

// 删除索引
    @Test
    public void deleteIndexToSolr() throws IOException, SolrServerException {
        //1. 创建solrj的服务对象
        SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");

        //2. 执行删除操作
        // solrServer.deleteById(" id/ids ");
        //条件基本格式:     字段的名称:字段的值
        solrServer.deleteByQuery("content:有钱");

        //3. 执行提交
        solrServer.commit();
    }

3. 查

3.1 基本查询

返回document对象

//基本查询入门案例(原生获取document的方式)
    @Test
    public void queryBaseToSolr() throws SolrServerException {
        //1. 创建solr的服务对象
        SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");

        //2. 执行查询的操作
        SolrQuery query =  new SolrQuery("*:*");
        QueryResponse response = solrServer.query(query);

        SolrDocumentList documentList = response.getResults();

        for (SolrDocument document : documentList) {
            Object id = document.get("id");
            Object title = document.get("title");
            Object content = document.get("content");
            System.out.println(id+" "+title+" "+content);
        }
    }

返回javabean对象

// 查询的基本入门案例(使用javaBean获取结果集)  常用
    @Test
    public void queryJavaBeanToSolr() throws SolrServerException {
        //1. 创建solr的服务对象
        SolrServer solrServer = new HttpSolrServer("http://localhost:80/solr/collection1");

        //2. 执行查询
        SolrQuery query = new SolrQuery("*:*");
        QueryResponse response = solrServer.query(query);

        //3. 返回javaBean
        List<Product> productList = response.getBeans(Product.class);

        for (Product product : productList) {
            System.out.println(product);
        }
    }

3.2 复杂查询

在创建SolrQuery时,我们填写的Query语句,可以有以下高级写法:

查询语句中如果有特殊字符,需要转义,可以使用: ” ”

1、匹配所有文档:*

www.htsjk.Com true http://www.htsjk.com/solr/27920.html NewsArticle solr, solr配置文件 1. solrConfig.xml : solr核心配置文件 2. schema.xml : solr约束文件 !--第一种标签为 field标签: 主要是用来指定字段名称的, Lucene中是有用户在程序中指定, solr中需要提前在配置...
相关文章
    暂无相关文章
评论暂时关闭