目錄: 1 solr7部署+創建核心2 solr mysql 連接 2.1 導入相關 jar包 2.2 配置連接信息 2.3 配置中文分析器3 solrj JAVA客戶端應用 3.1 solrj 構建和運行 3.2 solrj 應用(數據的 增、刪、改、查) 3.3 solrj JavaBean 整 ...
目錄:
1 solr7部署+創建核心
2 solr mysql 連接
2.1 導入相關 jar包
2.2 配置連接信息
2.3 配置中文分析器
3 solrj JAVA客戶端應用
3.1 solrj 構建和運行
3.2 solrj 應用(數據的 增、刪、改、查)
3.3 solrj JavaBean 整合應用
1 solr7部署+創建核心
solr7需要java8環境,且需要在環境變數中添加 JAVA_HOME變數。
solr有兩種啟動模式:
獨立模式:適用於數據規模不大的場景
雲模式:適用於數據規模大,高可靠、高可用、高併發的場景,基於zookeeper中間件
獨立模式是以 (core/核心) 來管理,雲模式是以(collection/集合)來管理。
本教程使用獨立模式,請到apache官網下載壓縮包windows版,solr-7.4.0.zip / 壓縮到本地
cd solr-7.4.0/bin/ 常用命令:
solr.cmd start 啟動 預設埠:8983
solr.cmd stop -all 停止
solr.cmd create -c [options] 創建核心
solr.cmd status 運行狀態
首先啟動solr 執行命令 solr.cmd start 併在瀏覽器下能訪問到下圖所示則表示訪問成功
然後創建核心 ,這裡我的核心名字叫bless solr.cmd start -c bless 。下圖表示創建成功
新創建core\核心的目錄位置
2 solr mysql 連接
2.1 導入相關 jar包
2.1.1 下載 mysql 驅動包:mysql-connector-java-x.x.x.jar
2.1.2 將 mysql 驅動包導入 solr :將下載下來的 mysql-connector-java-x.x.x.jar 拷貝到 solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib 下;
2.1.3 將solr{home}\dist目錄下的:solr-dataimporthandler-7.4.0.jar和solr-dataimporthandler-extras-7.4.0.jar這兩個jar包拷貝到 solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib下
2.2 配置連接信息
把solr-7.4.0\example\example-DIH\solr\db下的文件複製到你創建的core裡面 --> solr-7.4.0\server\solr\bless
打開conf目錄在db-data-config.xml和managed-schema中進行配置
我的資料庫表信息
db-data-config.xml配置資料庫連接信息
<dataConfig> <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3307/leslia" user="root" password="root" /> <document> <entity name="bless" query="select * from bless"> <field column="bless_id" name="id" /> <field column="bless_content" name="blessContent" /> <field column="bless_time" name="blessTime"/> </entity> </document> </dataConfig>
這個地方要註意一下 ,field主鍵必須設置為name="id",否則solr找不到主鍵會出現問題,為什麼?看一下managed-schema配置文件中的這個主鍵配置
然後去managed-schema里配置對應的field欄位,這個也可以在管理端直接添加,也可以手動修改配置文件,name屬性要與db-data-config.xml 文件中name屬性一致
<field name="blessContent" type="text_general" indexed="true" stored="true"/> <field name="blessTime" type="pdate" indexed="true" stored="true"/>
好了配置完畢。重啟solr,導入數據
查詢資料庫記錄是否導入
2.3 配置中文分析器
在solr-7.4.0/contrib/analysis-extras/lucene-libs下找到lucene-analyzers-smartcn-7.4.0.jar copy 到 solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib
修改conf/managed-schema 添加如下配置信息,並重新啟動solr
<!-- ChineseAnalyzer --> <fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/> </analyzer> </fieldType>
使用中文分析
不使用中文分析
給資料庫欄位配置中文分析,需要修改managed-schema配置文件 type="text_ik",具體應用本教程不再涉及。
<field name="blessContent" type="text_ik" indexed="true" stored="true"/> <field name="blessTime" type="pdate" indexed="true" stored="true"/>
3 solrj JAVA客戶端應用
solrJ是訪問Solr服務的JAVA客戶端,提供索引和搜索的請求方法,SolrJ通常嵌入在業務系統中,通過solrJ的API介面操作Solr服務。
示例數據還是應用上面mysql資料庫導入的
3.1 solrj 構建和運行
添加maven依賴
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>7.4.0</version> </dependency>
3.2 solrj 應用(數據的 增、刪、改、查)
獲取 HttpSolrClient 連接
private static final String solrUrl="http://localhost:8983/solr/bless";
//創建solrClient同時指定超時時間,不指定走預設配置
private static HttpSolrClient client=new HttpSolrClient.Builder(solrUrl)
.withConnectionTimeout(10000)
.withSocketTimeout(60000).build();
3.2.1 solrj 查詢
@Test
public void querySolr() throws Exception{
//封裝查詢參數
SolrQuery query = new SolrQuery("*:*");
//添加需要回顯得內容
query.addField("id");
query.addField("blessContent");
query.addField("blessTime");
query.setRows(20);//設置每頁顯示多少條
//執行查詢返回QueryResponse
QueryResponse response = client.query(query);
//獲取doc文檔
SolrDocumentList documents = response.getResults();
for(SolrDocument solrDocument:documents){
System.out.println(solrDocument.get("id"));
System.out.println(solrDocument.get("blessContent"));
System.out.println(solrDocument.get("blessTime"));
}
//關閉資源
client.close();
}
測試信息
3.2.2 solrj 增加/修改 修改是id不變其他欄位變更
@Test
public void solrAdd() throws Exception{
//創建文檔doc
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", 21);
doc.addField("blessContent", "solrj add");
doc.addField("blessTime",new Date());
//添加到client
UpdateResponse updateResponse = client.add(doc);
//索引文檔必須commit
client.commit();
}
在管理端查看一下剛纔添加的信息
3.2.3 solrj 刪除 刪除有3種方式
@Test public void solrDelete() throws Exception{ //1 通過id 刪除 client.deleteById("1"); //2 通過id List 刪除 ArrayList<String> ids = new ArrayList<String>(); ids.add("2"); ids.add("3"); client.deleteById(ids); //3 通過 查詢信息刪除 client.deleteByQuery("id:4"); // 提交 client.commit(); // 關閉資源 client.close(); }
3.3 solrj javaBean 整合應用
SolrJ支持通過
每個實例變數在Java對象可以映射到一個相應的Solr欄位中,使用 @Field註解
隱式轉換文檔與任何類。field註解
。
solr的fieldtype屬性 | javaBean 屬性類型 |
string | String |
boolean | Boolean |
pint | Integer |
pdouble | Double |
plong | Long |
pfloat | Float |
pdate | Date |
創建實體類:
public class Bless { @Field private String id; @Field private String blessContent; @Field private Date blessTime; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getBlessContent() { return blessContent; } public void setBlessContent(String blessContent) { this.blessContent = blessContent; } public Date getBlessTime() { return blessTime; } public void setBlessTime(Date blessTime) { this.blessTime = blessTime; } }
3.3.1 solrj + javaBean 查詢
@Test public void queryBean() throws Exception{ SolrQuery query = new SolrQuery("*:*"); //添加需要回顯得內容 query.addField("id"); query.addField("blessContent"); query.addField("blessTime"); query.setRows(20);//設置每頁顯示多少條 //執行查詢返回QueryResponse QueryResponse response = client.query(query); //獲取doc文檔 List<Bless> blessList=response.getBeans(Bless.class); for(Bless bless:blessList){ System.out.println(bless.getId()); System.out.println(bless.getBlessContent()); System.out.println(bless.getBlessTime()); } client.close(); }
3.3.2 solrj + javaBean 增加
@Test public void addBean() throws Exception{ Bless bless=new Bless(); bless.setId("19"); bless.setBlessContent("solr java bean add"); bless.setBlessTime(new Date()); //添加對象 UpdateResponse response = client.addBean(bless); //提交操作 client.commit(); //關閉資源 client.close(); }
至此,solr 簡單應用已經介紹完畢。本篇文章屬於簡單優美型,並未深入探索,希望能幫助到各位同學。如需幫助可在博客下方留言。