天天看點

solr(五):solrj實作對索引的增删改查一、環境二、建構開發環境三、功能代碼

一、環境

1.IDEA

2.JDK1.8

3.CDH5.7.0

二、建構開發環境

1.建立Maven工程,引入solr相關包

<!--solr-->
<dependency>
	<groupId>org.apache.solr</groupId>
	<artifactId>solr-solrj</artifactId>
	<version>4.10.3-cdh5.7.0</version>
</dependency>
           

最終pom檔案

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>BG</groupId>
    <artifactId>Hadoop</artifactId>
    <version>1.0-SNAPSHOT</version>


    <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>
    <properties>
        <hadoop.version>2.6.0-cdh5.7.0</hadoop.version>
        <hbase.version>1.2.0-cdh5.7.0</hbase.version>
        <solr.version>4.10.3-cdh5.7.0</solr.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--            <dependency>-->
        <!--                <groupId>org.apache.hadoop</groupId>-->
        <!--                <artifactId>hadoop-common</artifactId>-->
        <!--                <version>2.5.0-cdh5.2.0</version>-->
        <!--            </dependency>-->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>${hadoop.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>${hadoop.version}</version>
        </dependency>

        <!--solr-->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>${solr.version}</version>
        </dependency>


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>


    </dependencies>

</project>
           

三、功能代碼

1.增删改

package solr;

import Utils.ReadtxtUtils;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
//import org.junit.Test;

public class IndexManager {

	/**
	 * 建立索引初始版本
	 * @throws Exception
	 */
	public void IndexCreate() throws Exception{
		//建立和Solr服務端連接配接
		SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection1");
		
		//建立solr文檔對象
		SolrInputDocument doc = new SolrInputDocument();
		//域要先定義後使用,還有注意必須要有id主鍵域
		//solr中沒有專用的修改方法,更新其實就是,先删除同一id的索引,然後,再添加
		doc.addField("id", "a002");
		doc.addField("product_name", "台燈1`111");
		doc.addField("product_price", "12.5");
		doc.addField("product_description", "12.5");

		//将文檔加入solrServer對象中
		solrServer.add(doc);
		//送出
		solrServer.commit();
	}


	/**
	 * 添加抽象化參數
	 * @param id 檔案名稱
	 * @param product_name
	 * @param product_price
	 * @param product_description 檔案描述内容
	 * @throws Exception
	 */
	public void IndexCreate(String id,String product_name,String product_price,String product_description) throws Exception{
		//建立和Solr服務端連接配接
		SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection1");

		//建立solr文檔對象
		SolrInputDocument doc = new SolrInputDocument();
		//域要先定義後使用,還有注意必須要有id主鍵域
		//solr中沒有專用的修改方法, 會自動根據id進行查找,如果找到了則删除原來的将新的加入就是修改,如果沒找到,将新的直接加入則就是新增
		doc.addField("id", id);
		doc.addField("product_name", product_name);
		doc.addField("product_price", product_price);
		doc.addField("product_description", product_description);

		//将文檔加入solrServer對象中
		solrServer.add(doc);

		//送出
		solrServer.commit();
	}

	/**
	 * 删除文檔
	 * @throws Exception
	 */
	public void IndexDel() throws Exception{
		//建立和Solr服務端連接配接
		SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection1");
		
		//根據主鍵id進行删除
//		solrServer.deleteById("a002");
		
		//根據查詢删除,這裡是删除所有*:*
		solrServer.deleteByQuery("*:*");
		//送出
		solrServer.commit();
	}

	public static void main(String[] args) throws Exception {

		//readToString方法,将txt文檔内容讀出來
		String filecontent=new ReadtxtUtils().readToString("datas/背影-朱自清.txt");
		new IndexManager().IndexCreate("article001","ip/opt/datas/影-朱自清.txt","/opt/datas/影-朱自清.txt",filecontent);


	}
}
           

2.查詢

package solr;

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.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
//import org.junit.Test;

public class IndexSearch {
	public static void main(String[] args) throws Exception{

		String key="attr_content";//attr_content
		String value="*";

		new IndexSearch().IndexSearchByQuery(key,value);
	}

	/**
	 * 通用查詢原始
	 * @throws Exception
	 */
	public void IndexSearch1() throws Exception{
		//連接配接solr服務端
		SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection1");
		
		//建立solr查詢條件對象
		SolrQuery solrQuery = new SolrQuery();
		//查詢所有
		solrQuery.setQuery("*:*");
		
		//查詢并擷取查詢響應對象
		QueryResponse queryResponse = solrServer.query(solrQuery);
		//從查詢響應中擷取查詢結果集對象
		SolrDocumentList results = queryResponse.getResults();
		//列印一共查詢到多少條記錄,也就是記錄總數
		System.out.println("====================================================");
		System.out.println("=====count:" + results.getNumFound());
		//周遊查詢結果集
		for(SolrDocument doc : results){
			System.out.println("============="+doc.get("id"));
			System.out.println("============="+doc.get("product_name"));
//			System.out.println("============="+doc.get("product_price"));
			System.out.println("====================================================");
		}
	}

	/**
	 * 修改依據key:value查詢
	 * @param key
	 * @param value
	 * @throws Exception
	 */
	public void IndexSearchByQuery(String key,String value) throws Exception{
		//連接配接solr服務端
		SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr/collection2");
		
		//建立solr查詢條件對象
		SolrQuery solrQuery = new SolrQuery();
		//查詢所有
		solrQuery.setQuery(key+":"+value);
		//查詢并擷取查詢響應對象
		QueryResponse queryResponse = solrServer.query(solrQuery);
		//從查詢響應中擷取查詢結果集對象
		SolrDocumentList results = queryResponse.getResults();
		//列印一共查詢到多少條記錄,也就是記錄總數
		System.out.println("====================================================");
		System.out.println("=====count:" + results.getNumFound());
		//周遊查詢結果集
		for(SolrDocument doc : results){
			System.out.println("==============UUID : "+doc.get("id"));
			System.out.println("=======Origin Path : "+doc.get("path"));
			System.out.println("===========Content : "+doc.get("attr_content"));
			System.out.println("====================================================");
		}
	}

	/**
	 * 複雜查詢原始
	 * 過濾、排序、條數+分頁、高亮
	 * @throws Exception
	 */
	public void IndexSearch2() throws Exception{
		//連接配接solr服務端
		SolrServer solrServer = new HttpSolrServer("http://hadoop01:9999/solr");
		
		//建立solr查詢條件對象
		SolrQuery solrQuery = new SolrQuery();
		//查詢關鍵字輸入
		solrQuery.setQuery("背影");
		//設定預設搜尋域
		solrQuery.set("df", "product_keywords");
		//設定過濾查詢
		solrQuery.addFilterQuery("product_price:[1 TO 100]");
		//設定排序,這裡是降序
		solrQuery.setSort("product_price", ORDER.desc);
		//=======設定分頁========
		//設定起始條數
		solrQuery.setStart(0);
		//設定查詢多少條
		solrQuery.setRows(50);
	
		//========設定高亮顯示=======
		//高亮預設是關閉的,是以要手動開啟
		solrQuery.setHighlight(true);
		//設定需要高亮顯示的域
		solrQuery.addHighlightField("product_name");
		//設定高亮字首
		solrQuery.setHighlightSimplePre("<span style=\"color:red\">");
		//設定高亮字尾
		solrQuery.setHighlightSimplePost("</span>");
		
		//===================查詢并擷取查詢響應對象=====================================
		QueryResponse queryResponse = solrServer.query(solrQuery);
		//從查詢響應中擷取查詢結果集對象
		SolrDocumentList results = queryResponse.getResults();
		//列印一共查詢到多少條記錄,也就是記錄總數
		System.out.println("=====count====" + results.getNumFound());
		//周遊查詢結果集
		for(SolrDocument doc : results){
			System.out.println("============="+doc.get("id"));
			//擷取高亮
			Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
			List<String> list = highlighting.get(doc.get("id")).get("product_name");
			if(list != null && list.size() > 0){
				String hlName = list.get(0);
				System.out.println("=======high lighting=====" + hlName);
			}
			System.out.println("============="+doc.get("product_name"));
			System.out.println("============="+doc.get("product_price"));
			System.out.println("====================================================");
		}
	}
}
           

繼續閱讀