搜尋技術 Solr 入門詳解
一、介紹
企業站內搜尋技術選型
在一些大型入口網站、電子商務網站等都需要站內搜尋功能,使用傳統的資料庫查詢方式實現搜尋無法滿足一些高階的搜尋需求,比如:搜尋速度要快、搜尋結果按相關度排序、搜尋內容格式不固定等,這裡就需要使用全文檢索技術實現搜尋功能。
1. 單獨使用Lucene實現
單獨使用Lucene實現站內搜尋需要開發的工作量較大,主要表現在:索引維護、索引效能優化、搜尋效能優化等,因此不建議採用。
2. 使用Google或Baidu介面
通過第三方搜尋引擎提供的介面實現站內搜尋,這樣和第三方引擎系統依賴緊密,不方便擴充套件,不建議採用。
3. 使用Solr實現
基於Solr實現站內搜尋擴充套件性較好並且可以減少程式設計師的工作量,因為Solr提供了較為完備的搜尋引擎解決方案,因此在門戶、論壇等系統中常用此方案。
什麼是Solr
Solr 是Apache下的一個頂級開源專案,採用Java開發,它是基於Lucene
的全文搜尋伺服器。Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴充套件,並對索引、搜尋效能進行了優化
Solr可以獨立執行,執行在 Jetty、Tomcat 等這些 Servlet 容器中,Solr 索引的實現方法很簡單,用 POST 方法向 Solr 伺服器傳送一個描述 Field 及其內容的 XML 文件,Solr根據xml文件新增、刪除、更新索引 。Solr 搜尋只需要傳送 HTTP GET 請求,然後對 Solr 返回 Xml、json 等格式的查詢結果進行解析,組織頁面佈局。Solr不提供構建UI的功能,Solr提供了一個管理介面,通過管理介面可以查詢Solr的配置和執行情況。
solr是基於lucene開發企業級搜尋伺服器,實際上就是封裝了lucene。
Solr 是一個獨立的企業級搜尋應用伺服器,它對外提供類似於 Web-service的API 介面。使用者可以通過 http 請求,向搜尋引擎伺服器提交一定格式的檔案,生成索引;也可以通過提出查詢請求,並得到返回結果
Solr類似 webservice,呼叫介面,實現增加,修改,刪除,查詢索引庫。
solr特性
- 高階的全文搜尋功能
- 專為高通量的網路流量進行的優化
- 基於開放介面(xml和http)的標準
- 綜合的html管理介面
- 可伸縮性-能夠有效地複製到另外一個Solr搜尋伺服器
- 使用xml配置達到靈活性和適配性
- 可擴充套件的外掛體系
Solr與Lucene的區別
Lucene是一個開放原始碼的全文檢索引擎工具包,它不是一個完整的全文檢索引擎,Lucene提供了完整的查詢引擎和索引引擎,目的是為軟體開發人員提供一個簡單易用的工具包,以方便的在目標系統中實現全文檢索的功能,或者以Lucene為基礎構建全文檢索引擎。
Solr的目標是打造一款企業級的搜尋引擎系統,它是一個搜尋引擎服務,可以獨立執行,通過Solr可以非常快速的構建企業的搜尋引擎,通過Solr也可以高效的完成站內搜尋功能。
Solr 類似 webservice,提供介面,呼叫介面,傳送一些特點語句,實現增加,刪除,修改,查詢。
二、solr 安裝(mac)
-
- 首先安裝 jdk 和 jre
- 安裝solr:
brew install solr
安裝solr,可以通過brew edit solr
修改要安裝的版本 - 啟動 solr:
solr start
。
- 預設埠號
8083
,如果該埠被佔用,則會自動切換可用的埠。
- 預設埠號
- 建立 core(可以理解為mysql中的資料庫,即一個服務可以有多個庫):
solr create -c test_core
- 測試分詞
由於solr自帶的分詞器無法將中文根據語義分詞,需要引入中文分詞器 IKAnalyzer
三、IKAnalyzer 安裝
1. 下載必要的元件
- IKAnalyzer jar 包: ik-analyzer-solr5-5.x.jar
- IKAnalyzer 配置檔案: IKAnalyzer.cfg.xml
- 詞庫: mydict.dic 和 stopword.dic
下載後,將相關檔案複製到相應的目錄中,操作目錄如下:
cp ik-analyzer-solr5-5.x.jar /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/
mkdir /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
cp IKAnalyzer.cfg.xml /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
cp mydict.dic /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
cp stopword.dic /usr/local/Cellar/solr/7.3.1/server/solr-webapp/webapp/WEB-INF/lib/classes/
2. 修改 managed-schema 檔案
// test_core 倉庫下
vi /usr/local/Cellar/solr/7.3.1/server/solr/test_core/conf/managed-schema
在schema
標籤內追加以下內容:
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
<field name="text_ik" type="text_ik" indexed="true" stored="true" multiValued="false"/>
3. 重啟測試
進行重啟:solr restart
進行測試:重新整理頁面,進入到 test_core 倉庫下
測試成功!
四、solr 常用命令
- 其他命令
檢視版本:solr -version
重啟:solr -version
關閉:solr stop -all(或者指定埠號:solr stop -p 8983)
建立集合:solr create -c [集合名稱]
刪除集合:solr delete -c [集合名稱]
刪除資料
<delete>
<query>*:*</query>
</delete>
<commit/>
刪除欄位
{
"delete-field" : {
"name" : "欄位名稱"
},
"delete-field" : {
"name" : "欄位名稱"
}
}
提交的地址
POST http://localhost:8983/solr/集合名稱/schema
新增欄位
name: 欄位名稱
type: 欄位型別
stored: 是否儲存
indexed: 是否索引
{
"add-field" : {
"name" : "欄位名稱",
"type" : "text_ik",
"stored" : "true",
"indexed" : "true"
},
"add-field" : {
"name" : "欄位名稱",
"type" : "text_ik",
"stored" : "true"
}
}
提交地址
POST http://localhost:8983/solr/集合名稱/schema
還可以在管理員介面新增
相關推薦
搜尋技術 Solr 入門詳解
一、介紹 企業站內搜尋技術選型 在一些大型入口網站、電子商務網站等都需要站內搜尋功能,使用傳統的資料庫查詢方式實現搜尋無法滿足一些高階的搜尋需求,比如:搜尋速度要快、搜尋結果按相關度排序、搜尋內容格式不固定等,這裡就需要使用全文檢索技術實現搜尋功能。
區塊鏈以及區塊鏈技術入門詳解(2)
很多人迷惑於區塊鏈和以太坊,不知如何學習,本文簡單說了一下學習的一些方法和資源。 一、 以太坊和區塊鏈的關係 從區塊鏈歷史上來說,先誕生了比特幣,當時並沒有區塊鏈這個技術和名詞,然後業界從比特幣中提取了技術架構和體系,稱
區塊鏈以及區塊鏈技術入門詳解(1)
區塊鏈是目前一個比較熱門的新概念,蘊含了技術與金融兩層概念。從技術角度來看,這是一個犧牲一致性效率且保證最終一致性的的分散式的資料庫,當然這是比較片面的。從經濟學的角度來看,這種容錯能力很強的點對點網路,恰恰滿足了共享經濟的一個必須要求——低成本的可信環境。 1. 技術人員看待區塊鏈的正確姿勢
Jquery.ocupload 一鍵上傳技術方法引數詳解(中文翻譯)(一鍵上傳新手入門)
http://code.google.com/p/ocupload/ Jquery.ocupload 一鍵上傳官網重點內容 官方文件案例 Example var myUpload = $(element).upload({ name:
虛擬化技術基礎原理詳解
虛擬化技術基礎原理詳解DISK : IO調度模式 CFQ deadline anticipatory NOOP/sys/block/<device>/queue/schedulerMemory: MMU TLB vm.swappiness={0..100},使用交換分區的
Asp.Net MVC3 簡單入門詳解過濾器Filter
添加 重復 權限 組件 再次 ace text ext 開發 前言 在開發大項目的時候總會有相關的AOP面向切面編程的組件,而MVC(特指:Asp.Net MVC,以下皆同)項目中不想讓MVC開發人員去關心和寫類似身份驗證,日誌,異常,行為截取等這部分重復的代碼,那我們可以
線段樹 入門詳解
ear 接下來 數組 編譯器 一位 離散化 都是 並且 建立 概念(copy度娘): 線段樹是一種二叉搜索樹,與區間樹相似,它將一個區間劃分成一些單元區間,每個單元區間對應線段樹中的一個葉結點。 使用線段樹可以快速的查找某一個節點在若幹條線段中出現的次數,時間復雜度為O
PHP基礎入門詳解(一)【世界上最好用的編程語言】
轉換成 c語言 127.0.0.1 mac const 讀取 成對 後臺 isset 簡介 --------- PHP(超文本預處器)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨
Selenium Grid分布式測試入門詳解
lena 客戶端 odi before ons cycle lean efault 命令 本文對Selenium Grid進行了完整的介紹,從環境準備到使用Selenium Grid進行一次完整的多節點分布式測試。 運行環境為Windows 10,Selenium版本為
跨鏈技術之ILP詳解及應用
區塊鏈;跨鏈;托管;ilp;rippleAbstract:As the booming of BlockChain technology, the requirement of asset transfer between different ledgers is as imperative as possi
無向圖的割頂和橋,無向圖的雙連通分量入門詳解及模板 -----「轉載」
dbr break nts word 否則 mark push gravity 無向連通圖 https://blog.csdn.net/stillxjy/article/details/70176689 割頂和橋:對於無向圖G,如果刪除某個節點u後,連通分量數目
前端技術之_CSS詳解第二天
content gree 技術 OS XML xmlns src ref ie9 前端技術之_CSS詳解第二天 1、css基礎選擇器 html負責結構,css負責樣式,js負責行為。 css寫在head標簽裏面,容器style標簽。 先寫選擇器,然後寫大括號,大括號
linux三劍客之sed入門詳解
linux 三劍客 sed sed介紹sed流編輯器(stream editor),在三劍客中排行老二,是一款簡單的文本編輯語言。sed並不直接處理源文件,而是逐行讀取源文件的內容到內存(稱模式空間)中,然後在模式空間中使用sed命令處理,再打印模式空間處理後的內容到標準輸出。sed的能夠實現的功
搜索引擎系列八:solr-部署詳解(solr兩種部署模式介紹、獨立服務器模式詳解、SolrCloud分布式集群模式詳解)
nod 為什麽 用途 serve creat 復制 stand 數據 變量名 一、solr兩種部署模式介紹 Standalone Server 獨立服務器模式:適用於數據規模不大的場景 SolrCloud 分布式集群模式:適用於數據規模大,高可靠、高可用、高並發的場景 二
生成函數(母函數)入門詳解
參考 nsh 意義 數值 tar 得到 再次 fin 表達式 本文章從以上兩位大佬的博客參考而來!再次感謝! 母函數,又稱生成函數,是ACM競賽中經常使用的一種解題算法,常用來解決組合方面的題目。 在數學中,某個序列的母函數(Generating funct
樹鏈剖分入門詳解
管理 組成 你們 其它 現在 範圍 pro 所有 關系 樹鏈剖分入門詳解 以前沒有接觸過樹鏈剖分的同學們看到這個東西是不是覺得很高大上呢,下面我將帶你們進入樹的世界(講得不好別打我) 首先我們來看一道題 NOI2015D2T2軟件包管理器 題目描述如下 Linux用戶和O
主席樹入門詳解+題目推薦
主席樹學名可持久化線段樹,就是這個可持久化,衍生了多少資料結構 為什麼會有主席樹這個資料結構呢?它被髮明是用來解決什麼問題的呢? 給定n個數,m個操作,操作型別有在某個歷史版本下單點修改,輸出某個歷史版本下某個位置的值的值,n和m小於等於1e6 乍一看是不是一點頭緒也沒有。我們先來想想暴力怎麼
經典ASP NET MVC3 0入門詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
lambda表示式入門詳解
轉自 2018-03-02 Sevenvidia 碼農翻身 1、什麼是Lambda? 我們知道,對於一個Java變數,我們可以賦給其一個“值”。 如果你想把“一塊程式碼”賦給一個Java變數,應該怎麼做呢? 比如,我想把右邊那塊程式碼,賦給一個叫做aBlo
知識:整合營銷新手入門詳解
現在很多企業會提到整合營銷的概念。從字面理解,可能是把各種企業資源柔和在一起,發揮各自的最大化效益。整合營銷的目的是把現有的各種營銷方式進行合理化“加工”以後,再服務於企業的一種營銷策略。然而,在企業實際操作過程中,大部分經營者曲解了整合營銷的出發點,知道整合營銷很好,都在積極嘗試,但在嘗試