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操作) -----------------------------------------------------------------