1. 程式人生 > >Solr之入門案例-yellowcong

Solr之入門案例-yellowcong

Solr入門案例,通過java實現查詢,新增,刪除solr的索引的操作,特別需要注意的一點是,solr的jar版本需要通過伺服器版本一致,不然又有錯誤問題,同時還要注意依賴包的問題。

新增索引

新增索引的欄位,必須是在schema.xml 中配置了,不然就報錯

/**
 * 新增索引到solr伺服器
 * @throws Exception
 * @throws IOException
 */
public static void addIndex() throws Exception, IOException {
    // 例項化solr物件
    SolrServer solrServer = new
HttpSolrServer(SOLR_PATH); // 建立一個文件 //新增的Field 必須是在schema.xml 中配置了,不然就報錯 SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "6"); doc.addField("price", "100"); doc.addField("url", "http://test.com"); doc.addField("name", "毛衣6666"); // 建立文件2 SolrInputDocument doc2 = new
SolrInputDocument(); doc2.addField("id", "7"); doc2.addField("price", "100"); doc2.addField("url", "http://test.com"); doc2.addField("name", "毛衣77776"); // 單獨新增的方式 // solrServer.add(doc); // solrServer.add(doc2); // 集合新增多個的方式 List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); docs.add(doc2); docs.add(doc); solrServer.add(docs); // 提交
solrServer.commit(); }

查詢索引

案例

/**
 * 查詢solr裡面的資料
 * @throws Exception 
 */
public static void query() throws Exception {
    //查詢索引
    // 例項化solr物件
    SolrServer solrServer = new HttpSolrServer(SOLR_PATH);

    //新增查詢
    SolrQuery solrQuery = new SolrQuery();

    //查詢
    solrQuery.set("q", "name:毛衣");

    //獲取查詢結果
    QueryResponse response = solrServer.query(solrQuery);

    //獲取查詢到的文件
    SolrDocumentList docs = response.getResults();

    //查詢到的條數
    long cnt = docs.getNumFound();
    System.out.println("查詢到的條數\t"+cnt);

    //獲取查詢結果
    for(SolrDocument doc :docs) {
        String id = doc.get("id").toString();
        String price = doc.get("price").toString();
        String url = doc.get("url").toString();
        String name = doc.get("name").toString();
        System.out.printf("%s:%s:%s:%s\r\n",id,price,url,name);
    }
}

執行結果
這裡寫圖片描述

查詢的引數

這裡寫圖片描述

刪除索引

刪除的方式有兩種,一種是通過id來刪除,還有一種是通過查詢的方式刪除。

/**
* 通過id來刪除資料
 * @throws Exception
 * @throws IOException
 */
public static void deleteById() throws Exception, IOException {
    // 例項化solr物件
    SolrServer solrServer = new HttpSolrServer(SOLR_PATH);
    solrServer.deleteById("3");

    //通過id來刪除
    solrServer.commit();
}
/**
 * 通過查詢條件來珊瑚
 * @throws Exception
 * @throws IOException
 */
public static void deleteByQuery() throws Exception, IOException {
    // 例項化solr物件
    SolrServer solrServer = new HttpSolrServer(SOLR_PATH);

    solrServer.deleteByQuery("name:毛衣");

    //需要提交,不提交,就沒有刪除
    solrServer.commit();

}

完整程式碼

package day12_04;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
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.apache.solr.common.SolrInputDocument;

/**
 *
 * 作者:yellowcong 日期:2017/12/04 時間:13:19:59 描述:
 */
public class Demo {

    private static final String SOLR_PATH = "http://192.168.66.100:8080/solr/";

    public static void main(String[] args) throws Exception, IOException {
        //新增索引
        //addIndex();

        //查詢資料
//      query();

        //通過查詢方式 刪除
        deleteByQuery();
        query();
//      deleteById();

    }
    /**
     * 通過id來刪除資料
     * @throws Exception
     * @throws IOException
     */
    public static void deleteById() throws Exception, IOException {
        // 例項化solr物件
        SolrServer solrServer = new HttpSolrServer(SOLR_PATH);
        solrServer.deleteById("3");

        //通過id來刪除
        solrServer.commit();
    }
    /**
     * 通過查詢條件來珊瑚
     * @throws Exception
     * @throws IOException
     */
    public static void deleteByQuery() throws Exception, IOException {
        // 例項化solr物件
        SolrServer solrServer = new HttpSolrServer(SOLR_PATH);

        solrServer.deleteByQuery("name:毛衣");

        //需要提交,不提交,就沒有刪除
        solrServer.commit();

    }
    /**
     * 查詢solr裡面的資料
     * @throws Exception 
     */
    public static void query() throws Exception {
        //查詢索引
        // 例項化solr物件
        SolrServer solrServer = new HttpSolrServer(SOLR_PATH);

        //新增查詢
        SolrQuery solrQuery = new SolrQuery();

        //查詢
        solrQuery.set("q", "name:毛衣");

        //獲取查詢結果
        QueryResponse response = solrServer.query(solrQuery);

        //獲取查詢到的文件
        SolrDocumentList docs = response.getResults();

        //查詢到的條數
        long cnt = docs.getNumFound();
        System.out.println("查詢到的條數\t"+cnt);

        //獲取查詢結果
        for(SolrDocument doc :docs) {
            String id = doc.get("id").toString();
            String price = doc.get("price").toString();
            String url = doc.get("url").toString();
            String name = doc.get("name").toString();
            System.out.printf("%s:%s:%s:%s\r\n",id,price,url,name);
        }
    }
    /**
     * 新增索引到solr伺服器
     * @throws Exception
     * @throws IOException
     */
    public static void addIndex() throws Exception, IOException {
        // 例項化solr物件
        SolrServer solrServer = new HttpSolrServer(SOLR_PATH);

        // 建立一個文件
        //新增的Field 必須是在schema.xml 中配置了,不然就報錯
        SolrInputDocument doc = new SolrInputDocument();
        doc.addField("id", "6");
        doc.addField("price", "100");
        doc.addField("url", "http://test.com");
        doc.addField("name", "毛衣6666");

        // 建立文件2
        SolrInputDocument doc2 = new SolrInputDocument();
        doc2.addField("id", "7");
        doc2.addField("price", "100");
        doc2.addField("url", "http://test.com");
        doc2.addField("name", "毛衣77776");

        // 單獨新增的方式
        // solrServer.add(doc);
        // solrServer.add(doc2);

        // 集合新增多個的方式
        List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
        docs.add(doc2);
        docs.add(doc);
        solrServer.add(docs);

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

環境搭建

專案結構

這裡寫圖片描述

pom.xml

<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>yellowcong</groupId>
    <artifactId>day12_04</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>day12_04</name>
    <url>http://maven.apache.org</url>

    <!-- 配置國內比較快的 阿里雲的Maven倉庫 -->
    <repositories>
        <repository>
            <id>aliyunmaven</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <lucene.version>4.5.1</lucene.version>
        <mmseg4j.version>1.9.1</mmseg4j.version>
    </properties>

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

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

        <!-- lucene核心包 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>${lucene.version}</version>
        </dependency>
        <!--QueryParser 查詢類 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>${lucene.version}</version>
        </dependency>
        <!-- 分詞器 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-common</artifactId>
            <version>${lucene.version}</version>
        </dependency>
        <!-- 高亮顯示 -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-highlighter</artifactId>
            <version>${lucene.version}</version>
        </dependency>

        <!-- 庖丁解牛分詞器 -->
        <dependency>
            <groupId>com.chenlb.mmseg4j</groupId>
            <artifactId>mmseg4j-core</artifactId>
            <version>${mmseg4j.version}</version>
        </dependency>
        <dependency>
            <groupId>com.chenlb.mmseg4j</groupId>
            <artifactId>mmseg4j-analysis</artifactId>
            <version>${mmseg4j.version}</version>
        </dependency>

        <!-- ikanalyzer 分詞器 -->
        <dependency>
            <groupId>com.janeluo</groupId>
            <artifactId>ikanalyzer</artifactId>
            <version>2012_u6</version>
        </dependency>

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

        <!-- 日誌配置檔案,必須有,不然會報錯 -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.16</version>
        </dependency>
    </dependencies>
</project>

日誌檔案 log4j

#log4j.rootLogger=debug,Console
log4j.rootLogger=error,Console

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n

錯誤合集

日誌環境

solr需要新增日誌的jar包,不然就會報錯
這裡寫圖片描述

配置pom.xml檔案,然後配置log4j

<!-- 日誌配置檔案,必須有,不然會報錯 -->
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.3</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.16</version>
</dependency>

配置log4j

log4j.rootLogger=debug,Console

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n

unknown field

在提交的資料,欄位必須是在schema.xml的檔案中配置過的

Exception in thread "main" org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: ERROR: [doc=7] unknown field 'nam21212e'

這裡寫圖片描述

schema.xml的檔案中,必須是存在的欄位,如果不存在,我們新增,就會報錯

vim /usr/local/solr/solr-4.10.3/example/solr/collection1/conf/schema.xml

這裡寫圖片描述

相關推薦

Solr入門案例-yellowcong

Solr入門案例,通過java實現查詢,新增,刪除solr的索引的操作,特別需要注意的一點是,solr的jar版本需要通過伺服器版本一致,不然又有錯誤問題,同時還要注意依賴包的問題。 新增索引 新增索引的欄位,必須是在schema.xml 中配置了,

Java的資料庫程式設計入門案例

package test.jdbc; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.sql.Connect

Python 訊息佇列rabbitmq使用入門案例

1、在本機上安裝好rabbitmq 2、安裝pika 操作rabbitmq的三方庫 建議在虛擬環境中操作 pip install pika 3、入門例項 釋出端程式碼,我這裡命名為

PowerBI系列入門案例動態銷售報告

  本文將講解如何從零開始使用PowerBI Desktop製作一份動態銷售報告。幫助大家快速入門PowerBI Desktop的操作。我們先來看一下一份動態銷售報告的構成。 1、左上角放置了小黎子資料分析的二維碼圖片,緊接著是切片器,由城市,店長,店鋪資料預設情況下是所有的資料,點選下拉框可以進行篩

solr搜索入門及原理(一)

solr solr入門 1 solr簡介solr官方文檔:http://wiki.apache.org/solr/DataImportHandler 下載地址:http://www.apache.org/dyn/closer.cgi/lucene/solr/2 solr入門我們使

golang入門案例SOCKET

int div 進行 lec ont func 轉換 exit oca //服務端代碼package main import ( "fmt" "net" "log" "os" "encoding/binary" ) func main() { //建立s

CMake系列二:入門案例-單個源文件

bubuko 源文件 註釋 http 編寫 AD 源碼 power 比較 編寫一個源碼文件 如下 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 double power(double

Mybatis入門案例增刪改查

取值 private wid resources property 文件 3.0 AS 普通 MyBatis:是一個支持普通sql查詢和存儲過程以及高級映射的優秀持久層框架,其主要思想是將代碼中大量的SQL語句剝離出來,配置到配置文件中,以實現SQL的靈活配置. mybat

SparkSql入門案例三(Spark1.x)

案例一和案例二中是將RDD轉換成DataFrame的方法不同,但是在轉換後都是使用SQL的方式來程式設計的,這裡就用DataFrame API(DSL   特定領域程式語言)的方式來實現 直接上程式碼: package cn.ysjh0014.SparkSql impo

SparkSQL入門案例二(SparkSQL1.x)

SparkSQL入門案例一中的思路主要是: 1).建立SparkContext 2).建立SQLContext 3).建立RDD 4).建立一個類,並定義類的成員變數 5).整理資料並關聯class 6).將RDD轉換成DataFrame(匯入隱式轉換) 7).將DataFrame註冊成臨時表

SparkSQL入門案例四(SparkSQL2.x)

前幾個案例講的都是都是SparkSQL1.x的程式設計,所以這裡就講SparkSQL2.x的程式設計 直接上程式碼,這裡的程式碼是在前邊案例的基礎上的: package cn.ysjh0014.SparkSql import org.apache.spark.SparkConf impor

java多執行緒入門案例(2)多執行緒簡單應用

  上一篇文章:java多執行緒案例(1)之簡單銀行取款問題及其優化 我大概介紹了一下Java程式碼優化的問題,主要針對出學者而言,這一次我要介紹多執行緒應用的簡單案例 。網上有許多多執行緒的案例,但大多都挺複雜的,今天我主要目的也是介紹一下多執行緒應用的簡單案例,讓初學

java多執行緒入門案例(1)簡單銀行取款問題及其優化

      之前學java的時候,學校老師由於課時問題,沒有教我們多執行緒,最近學校外聘的企業教師給我們做實訓要用到多執行緒,因此才初步瞭解多執行緒,以下這個案例只是介紹java程式碼優化,程式碼中有涉及多執行緒,但今天不對其講解,只簡單講解程式碼優化的問題,希望對初學

springBoot入門案例2-MVC的簡單配置

上一篇已經介紹了關於springboot的入門,執行啟動類後我們發現springboot已經集成了springMVC的功能。但大多數情況下我們還需要對springBoot預設配置進行修改 通過檢視springboot的官方文件有這麼一段話---段落標題:27.1.1 Spr

Python GUI程式設計tkinter入門案例--簡單的自動檔案下載器

利用Python3.6開發了一個簡易版的檔案批量下載軟體demo,使用的GUI工具是tkinter。預設開啟桌面的資料夾,可以實現自動讀取文字檔案中的檔案超連結,實現自動下載到桌面。 最近在整理自己磁碟檔案時,發現很多下載的檔案,如果只保留一個下載的超連結,這樣

編解碼框架Marshalling入門案例(結合Netty)

Marshalling入門 1.1 基本概念 JBoss Marshalling是一個Java物件序列化包,對JDK預設的序列化框架進行了優化,但又保持跟java.io.Serializable介面的相容,同時增加了一些可調的引數和附加的特性,這些引數和特性可通

SparkSql入門案例四(Spark1.x)

案例一和案例二中是將RDD轉換成DataFrame的方法不同,但是在轉換後都是使用SQL的方式來程式設計的,這裡就用DataFrame API的方式來實現 直接上程式碼: package cn.ysjh0014.SparkSql import org.apache.sp

Flink二 Flink安裝及入門案例

Flink 安裝(叢集模式):    1:下載安裝flink的安裝包,注意hadoop的版本相容問題  2:解壓安裝包,進入conf配置檔案目錄下,主要配置檔案為flink-conf.yaml和slaves,配置flink-conf.yaml解析如下:   2.1

flink的入門案例wordcount

這是依賴<dependency><groupId>org.apache.flink</groupId><artifactId>flink-java</artifactId><version>1.5.0&l

elasticsearch快速入門案例實戰電商網站商品管理:叢集健康檢查,CRUD

主要內容: 1、document資料格式 2、電商網站商品管理案例:背景介紹 3、簡單的叢集管理 4、商品的CRUD操作(document CRUD操作) -----------------------------------------------------------------