1. 程式人生 > >Solr基礎理論與維護管理快速上手(含查詢引數說明)

Solr基礎理論與維護管理快速上手(含查詢引數說明)

1、 solr基礎

因為 Solr 包裝並擴充套件了 Lucene,所以它們使用很多相同的術語。更重要的是,Solr 建立的索引與 Lucene 搜尋引擎庫完全相容。通過對 Solr 進行適當的配置,某些情況下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Lucene 應用程式中的索引。

在 Solr 和 Lucene 中,使用一個或多個 Document 來構建索引。Document 包括一個或多個 Field。Field 包括名稱、內容以及告訴 Solr 如何處理內容的元資料。例如,Field 可以包含字串、數字、布林值或者日期,也可以包含你想新增的任何型別,只需用在solr的配置檔案中進行相應的配置即可。Field 可以使用大量的選項來描述,這些選項告訴 Solr 在索引和搜尋期間如何處理內容。現在,檢視一下表 1 中列出的重要屬性的子集:

屬性名稱

描述

Indexed

Indexed Field 可以進行搜尋和排序。你還可以在 indexed Field 上執行 Solr 分析過程,此過程可修改內容以改進或更改結果。

Stored

stored Field 內容儲存在索引中。這對於檢索和醒目顯示內容很有用,但對於實際搜尋則不是必需的。例如,很多應用程式儲存指向內容位置的指標而不是儲存實際的檔案內容。

2、 solr索引操作

在 Solr 中,通過向部署在 servlet 容器中的 Solr Web 應用程式傳送 HTTP 請求來啟動索引和搜尋。Solr 接受請求,確定要使用的適當 SolrRequestHandler,然後處理請求。通過 HTTP 以同樣的方式返回響應。預設配置返回 Solr 的標準 XML 響應。你也可以配置 Solr 的備用響應格式,如json、csv格式的文字。

索引就是接受輸入元資料(資料格式在schema.xml中進行配置)並將它們傳遞給 Solr,從而在 HTTP Post XML 訊息中進行索引的過程。你可以向 Solr 索引 servlet 傳遞四個不同的索引請求:

2.1. add/update

 允許您向 Solr 新增文件或更新文件。直到提交後才能搜尋到這些新增和更新。

2.2. commit

告訴 Solr,應該使上次提交以來所做的所有更改都可以搜尋到。

2.3. optimize

重構 Lucene 的檔案以改進搜尋效能。索引完成後執行一下優化通常比較好。如果更新比較頻繁,則應該在使用率較低的時候安排優化。一個索引無需優化也可以正常地執行。優化是一個耗時較多的過程。

2.4. delete

可以通過 id 或查詢來指定。按 id 刪除將刪除具有指定 id 的文件;按查詢刪除將刪除查詢返回的所有文件。

Lucene中操作索引也有這幾個步驟,但是沒有更新。Lucene更新是先刪除,然後新增索引。因為更新索引在一定情況下,效率沒有先刪除後新增的效率好。

3、 搜尋

新增文件後,就可以搜尋這些文件了。Solr 接受 HTTP GET 和 HTTP POST 查詢訊息。收到的查詢由相應的 SolrRequestHandler 進行處理。

solr查詢引數描述:

引數

描述

示例

q

Solr 中用來搜尋的查詢。有關該語法的完整描述,請參閱 參考資料。可以通過追加一個分號和已索引且未進行斷詞的欄位(下面會進行解釋)的名稱來包含排序資訊。預設的排序是 score desc,指按記分降序排序。

q=myField:Java AND otherField:developerWorks; date asc

此查詢搜尋指定的兩個欄位,並根據一個日期欄位對結果進行排序。

start

將初始偏移量指定到結果集中。可用於對結果進行分頁。預設值為 0。

start=15

返回從第 15 個結果開始的結果。

rows

返回文件的最大數目。預設值為 10。

rows=25,返回25個結果集

fq

提供一個可選的篩選器查詢。查詢結果被限制為僅搜尋篩選器查詢返回的結果。篩選過的查詢由 Solr 進行快取。它們對提高複雜查詢的速度非常有用。

任何可以用 q 引數傳遞的有效查詢,排序資訊除外。

hl

當 hl=true 時,在查詢響應中醒目顯示片段。預設為 false。參看醒目顯示引數(見 參考資料)。

hl=true

fl

作為逗號分隔的列表指定文件結果中應返回的 Field 集。預設為 “*”,指所有的欄位。“score” 指還應返回記分。

*,score

sort

排序,對查詢結果進行排序,參考

sort=date asc,price desc

4、 solr模式

上面有提到schema.xml這個配置,這個配置可以在你下載solr包的安裝解壓目錄的apache-solr-3.4.0\example\solr\conf中找到,它就是solr模式關聯的檔案。開啟這個配置檔案,你會發現有詳細的註釋。

模式組織主要分為三個重要配置

4.1. types 部分

是一些常見的可重用定義,定義了 Solr(和 Lucene)如何處理 Field。也就是新增到索引中的xml檔案屬性中的型別,如int、text、date等

4.2. fileds

是你新增到索引檔案中出現的屬性名稱,而宣告型別就需要用到上面的types

4.3. 其他配置

uniqueKey 唯一鍵,這裡配置的是上面出現的fileds,一般是id、url等不重複的。在更新、刪除的時候可以用到。

defaultSearchField預設搜尋屬性,如q=solr就是預設的搜尋那個欄位

solrQueryParser查詢轉換模式,是並且還是或者(and/or)

4.4. schema配置型別

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        <filter class="solr.StopFilterFactory" ignoreCase="true"
            words="stopwords.txt" />
        <filter class="solr.WordDelimiterFilterFactory"
            generateWordParts="1" generateNumberParts="1" catenateWords="1"
            catenateNumbers="1" catenateAll="0" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
            ignoreCase="true" expand="true" />
        <filter class="solr.StopFilterFactory" ignoreCase="true"
            words="stopwords.txt" />
        <filter class="solr.WordDelimiterFilterFactory"
            generateWordParts="1" generateNumberParts="1" catenateWords="0"
            catenateNumbers="0" catenateAll="0" />
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />
        <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
    </analyzer>
</fieldType>

上面就是一個type了,然後你在fields配置field的時候就可以用這個type。

首先,上面的fieldType的配置中有兩個analyzer,它是分詞器。

主要把我們的資料進行分割成一個個的詞語。詞幹提取、停止詞刪除以及相似的操作都被應用於標記,然後才進行索引和搜尋,導致使用相同型別的標記。

上面的應用程式的 Solr 的fieldType配置按以下步驟進行設定:

Ø 根據空白進行斷詞,然後刪除所有的公共詞(StopFilterFactory)

Ø 使用破折號處理特殊的大小寫、大小寫轉換等等。(WordDelimiterFilterFactory);將所有條目處理為小寫(LowerCaseFilterFactory)

Ø 使用 Porter Stemming 演算法進行詞幹提取(EnglishPorterFilterFactory)

Ø 刪除所有的副本(RemoveDuplicatesTokenFilterFactory)

4.5. schema屬性、欄位

<field name="id" type="string" indexed="true" stored="true"
    required="true" />
<field name="sku" type="text_en_splitting_tight" indexed="true"
    stored="true" omitNorms="true" />
<field name="name" type="text_general" indexed="true" stored="true" />
<field name="alphaNameSort" type="alphaOnlySort" indexed="true"
    stored="false" />
<field name="manu" type="text_general" indexed="true" stored="true"
    omitNorms="true" />
<field name="cat" type="string" indexed="true" stored="true"
    multiValued="true" />
<field name="features" type="text_general" indexed="true" stored="true"
    multiValued="true" />
<field name="includes" type="text_general" indexed="true" stored="true"
    termVectors="true" termPositions="true" termOffsets="true" />

屬性是在新增索引、查詢的時候必須的配置,如果你不加這些配置。是無法完成索引的建立的。

4.5.1. id屬性

首先id屬性是未經分析的字串型別,是可以索引、儲存的,並且是唯一的。

4.5.2. sku屬性

sku是一個經過分詞器分析出來的英文切割的型別字元,可以索引、儲存、不要儲存規範

4.5.3. multiValued 屬性

multiValued 屬性是一個特殊的例子,指 Document 可以擁有一個相同名稱添加了多次的 Field。

4.5.4. omitNorms屬性

omitNorms 屬性告訴 Solr(和 Lucene)不要儲存規範。

4.5.6. 動態欄位dynamicField

介紹一下欄位宣告下方的 <dynamicField> 宣告。

動態欄位是一些特殊型別的欄位,可以在任何時候將這些欄位新增到任何文件中,由欄位宣告定義它們的屬性。

動態欄位和普通欄位之間的關鍵區別在於前者不需要在 schema.xml 中提前宣告名稱。

Solr 將名稱宣告中的 glob-like 模式應用到所有尚未宣告的引入的欄位名稱,並根據其 <dynamicField> 宣告定義的語義來處理欄位。

例如,<dynamicField name="*_i" type="sint" indexed="true" stored="true"/> 指一個 myRating_i 欄位被 Solr 處理為 sint,儘管並未將其宣告為欄位。

這種處理比較方便,例如,當需要使用者定義待搜尋內容的時候。

5、 索引配置solrconfig.xml

Solr 效能因素,來了解與各種更改相關的效能權衡。

表 1 概括了可控制 Solr 索引處理的各種因素:

因素

描述

useCompoundFile

通過將很多 Lucene 內部檔案整合到單一一個檔案來減少使用中的檔案的數量。這可有助於減少 Solr 使用的檔案控制代碼數目,代價是降低了效能。除非是應用程式用完了檔案控制代碼,否則 false 的預設值應該就已經足夠。

mergeFactor

決定低水平的 Lucene 段被合併的頻率。較小的值(最小為 2)使用的記憶體較少但導致的索引時間也更慢。較大的值可使索引時間變快但會犧牲較多的記憶體。

maxBufferedDocs

在合併記憶體中文件和建立新段之前,定義所需索引的最小文件數。段 是用來儲存索引資訊的 Lucene 檔案。較大的值可使索引時間變快但會犧牲較多的記憶體。

maxMergeDocs

控制可由 Solr 合併的 Document 的最大數。較小的值 (< 10,000) 最適合於具有大量更新的應用程式。

maxFieldLength

對於給定的 Document,控制可新增到 Field 的最大條目數,進而截斷該文件。如果文件可能會很大,就需要增加這個數值。然而,若將這個值設定得過高會導致記憶體不足錯誤。

unlockOnStartup

unlockOnStartup 告知 Solr 忽略在多執行緒環境中用來保護索引的鎖定機制。在某些情況下,索引可能會由於不正確的關機或其他錯誤而一直處於鎖定,這就妨礙了新增和更新。將其設定為 true 可以禁用啟動鎖定,進而允許進行新增和更新。

6、 查詢處理配置solrconfig.xml

6.1. <maxBooleanClauses> 標記

定義了可組合在一起形成一個查詢的子句數量的上限。對於大多數應用程式而言,預設的 1024 就應該已經足夠;

然而,如果應用程式大量使用了萬用字元或範圍查詢,增加這個限值將能避免當值超出時,丟擲 TooManyClausesException。

6.2. <enableLazyFieldLoading>標記

若應用程式預期只會檢索 Document 上少數幾個 Field,那麼可以將 <enableLazyFieldLoading> 屬性設定為 true。

懶散載入的一個常見場景大都發生在應用程式返回和顯示一系列搜尋結果的時候,使用者常常會單擊其中的一個來檢視儲存在此索引中的原始文件。

初始的顯示常常只需要顯示很短的一段資訊。若考慮到檢索大型 Document 的代價,除非必需,否則就應該避免載入整個文件。

6.3. <query>部分

<query> 部分負責定義與在 Solr 中發生的事件相關的幾個選項。

Searcher 的 Java 類來處理 Query 例項。要改進這一設計和顯著提高效能,把這些新的 Searcher 聯機以便為現場使用者提供查詢服務之前,先對它們進行 “熱身”。

<query> 部分中的 <listener> 選項定義 newSearcher 和 firstSearcher 事件,您可以使用這些事件來指定例項化新搜尋程式或第一個搜尋程式時應該執行哪些查詢。

如果應用程式期望請求某些特定的查詢,那麼在建立新搜尋程式或第一個搜尋程式時就應該反註釋這些部分並執行適當的查詢。

6.4. 其它配置

solrconfig.xml 檔案的剩餘部分,除 <admin> 之外,涵蓋了與 快取、複製 和 擴充套件或定製 Solr 有關的專案。

admin 部分讓您可以定製管理介面。有關配置 admin 節的更多資訊,請參看solrconfig.xml 檔案中的註釋。

7、 監視、記錄和統計資料

用於監視、記錄和統計資料的 Solr 管理選項

選單名

URL

描述

Statistics

Statistics 管理頁提供了與 Solr 效能相關的很多有用的統計資料。這些資料包括:

關於何時載入索引以及索引中有多少文件的資訊。

關於用來服務查詢的 SolrRequestHandler 的有用資訊。

涵蓋索引過程的資料,包括新增、刪除、提交等的數量。

快取實現和 hit/miss/eviction 資訊

Info

有關正在執行的 Solr 的版本以及在當前實現中進行查詢、更新和快取所使用的類的詳細資訊。此外,還包括檔案存於 Solr subversion 儲存庫的何處的資訊以及對該檔案功能的一個簡要描述。

properties

http: //localhost:8080/solr/admin/get-properties.jsp

顯示當前系統正在使用的所有 Java 系統屬性。Solr 支援通過命令列的系統屬性替換。有關實現此特性的更多資訊,請參見 solrconfig.xml 檔案。

Thread dump

http://localhost:8080/solr/admin/threaddump.jsp

thread dump 選項顯示了在 JVM 中執行的所有執行緒的堆疊跟蹤資訊。

8、 智慧快取

智慧快取是讓 Solr 得以成為引人矚目的搜尋伺服器的一個關鍵效能特徵。

Solr 提供了四種不同的快取型別,所有四種類型都可在 solrconfig.xml 的 <query> 部分中配置。

solrconfig.xml 檔案中所用的標記名列出了這些快取型別:

快取標記名

描述

能否自熱

filterCache

通過儲存一個匹配給定查詢的文件 id 的無序集,過濾器讓 Solr 能夠有效提高查詢的效能。快取這些過濾器意味著對 Solr 的重複呼叫可以導致結果集的快速查詢。更常見的場景是快取一個過濾器,然後再發起後續的精煉查詢,這種查詢能使用過濾器來限制要搜尋的文件數。

可以

queryResultCache

為查詢、排序條件和所請求文件的數量快取文件 id 的有序 集合。

可以

documentCache

快取 Lucene Document,使用內部 Lucene 文件 id(以便不與 Solr 惟一 id 相混淆)。由於 Lucene 的內部 Document id 可以因索引操作而更改,這種快取不能自熱。

不可以

Named caches

命名快取是使用者定義的快取,可被 Solr 定製外掛 所使用。

可以,

如果實現了 org.apache.solr.search.CacheRegenerator 的話。

每個快取宣告都接受最多四個屬性:

class 是快取實現的 Java 名。

size 是最大的條目數。

initialSize 是快取的初始大小。

autoWarmCount 是取自舊快取以預熱新快取的條目數。如果條目很多,就意味著快取的 hit 會更多,只不過需要花更長的預熱時間。

相關推薦

Solr基礎理論維護管理快速上手(查詢引數說明)

1、 solr基礎 因為 Solr 包裝並擴充套件了 Lucene,所以它們使用很多相同的術語。更重要的是,Solr 建立的索引與 Lucene 搜尋引擎庫完全相容。通過對 Solr 進行適當的配置,某些情況下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Luce

Linux系統Oracle 12cR2 RAC集群安裝維護管理(12.2)專題

oracle教程 oracle培訓 oracle數據庫教程 oracle工程師培訓 oracle數據庫培訓 風哥Linux系統Oracle 12cR2 RAC集群安裝與維護管理(12.2)專題包括內容:Oracle數據庫12cR2(項目實戰之一):在Windows上安裝Oracle12.2

Masonry介紹使用實踐(快速上手Autolayout)

前言 1 MagicNumber -> autoresizingMask -> autolayout 以上是純手寫程式碼所經歷的關於頁面佈局的三個時期 在iphone1-iphone3gs時代

Masonry介紹使用實踐(快速上手Autolayout)-讓IOS自動化相對佈局更簡單

前言 MagicNumber -> autoresizingMask -> autolayout 以上是純手寫程式碼所經歷的關於頁面佈局的三個時期 在iphone1-iphone3gs時代 window的size固定為(320,480) 我們只需

hadoop快速自我學習--hadoop平臺管理維護

1,HDFS常用命令 hdfs dfs -mkdir /data hdfs dfs -put  localfile  hdfspath -rm   -du -h -chmod -chown  user:group  hdfspath -cat    -zcat

SQL SERVER 2008數據庫管理維護總結

sql server1、事物日誌 分為小的虛擬日誌VLF,它有編號叫LSN2、檢查點默認每隔1分鐘將內存數據存盤,故障點發生後日誌重做,事物根據提交與否前滾或回滾。3、在數據庫整體主菜單欄選擇屬性可設置數據文件和日誌文件的存放地點,設置完後需要重啟服務,可主菜單右鍵重啟服務或通過windows系統服務重啟。4

Hibernate學習筆記(1)---hibernate快速上手準備工作

成了 -- 開源 工作 快速 tar ref orm 磁盤 持久層介紹 持久化:將內存中的數據保存在磁盤等存儲設備中。 持久化對象:指已經存儲在數據庫護著磁盤的業務對象 經典的軟件應用體系結構(三層結構) 在三層結構中,由於業務邏輯除了負責業務邏輯以外,還要負責相關的數據

solr學習三(測試類,普通ExtractingRequestHandler測試)

list clas map ber -h div comment test bst solr客戶端基本是配置出來的,服務端可以對其進行測試,我使用的是solrj服務端。 如果初學solr,先使用普通的測試類: Java代碼 import java.io.IO

快速上手深度學習 掌握TensorFlow模型構建開發

第5章 第6章 優勢 損失函數 學習過程 htm 項目 機器 過程 第1章 課程介紹介紹機器學習的背景,介紹tensorflow的背景,介紹課程python,numpy,virtualenv等前置學習內容,安裝tensorflow1-1 導學1-2 課程安排1-3 深度學習

w9 Ansible批量管理維護

交互 ren == shp 狀態 不支持 change arc res ssh秘鑰認證 基於口令的安全驗證 [root@m01 ~]# ssh 10.0.0.41 hostname [email protected]‘s password: backup [ro

MySQL資料庫日誌的管理維護

MySQL資料庫主要有5種類型的日誌,分別為慢查詢日誌(log-slow-queries),二進位制日誌(log-bin),錯誤日誌(log-error),查詢日誌(log),更新日誌(log-update)。在新的MySQL版本中,已取消了更新日誌,可以用二進位制日誌來替代這個功能。文章側重講解慢

Linux命令[系統管理維護命令]

ls: 列出工作目錄所含的檔案及子目錄, 可以用dir代替ls 語法: ls [選項] [路徑或檔案] -- 註釋: 列出mnt目錄下的檔案及其子目錄-- > ls /mnt apk-update-service git-repo-for-redmine li

產品介紹快速上手視訊教程購買專業版本免費下載 介紹8種常用的專案管理工具

https://www.edrawsoft.com/cn/project-management-tools.php 本文提供有效的專案管理工具,包括甘特圖,WBS,日曆,時間線,狀態表,HOQ,和思維導圖製作工具。 專案管理涉及有效的計劃和對工作的系統管理。它包括定義專案目標,制定行程和安排

mysql ---分割槽管理維護

mysql 分割槽管理 為沒有分割槽的表建立分割槽 alter table user_1 partition by range(age)( partition age_1 values less than (20), partition age_2 values less than (30)

ArcGIS API for JavaScript 實戰解析(一):簡介快速上手

在這篇文章之前廢話幾句。 自從過完十一假期,每天都在奔波和加班中度過,直到今天才真正能夠休息。隱約記得去年是同樣的情形,但並不是相同的事由,希望明年十月對我好一點。 從二月到十月的八個月裡,我幾乎每天都堅持學習,從程式語言、軟體開發到機器學習、WebGIS,還有

Odoo浪潮合資研發PS Cloud之如何管理B2B(不稅)和B2C(稅)的價格?

在與消費者合作時,價格通常用價格中包含的稅收來表示(例如,在大多數電子商務中)。但是,當你在B2B環境下工作時,公司通常會協商價格,不包括稅收。 Odoo可以輕鬆地管理這兩個用例,只要您在產品上註冊價格時不包括或包括稅收,但兩者不能同時使用。如果你管理所有的價格,僅包括稅(或排除),你仍

Vue.js快速上手|單向繫結雙向繫結

 概述 Vue.js 最顯著的特點就是響應式和資料驅動,也就是將Model和View進行單向繫結或者雙向繫結。單向繫結:把Model繫結到View,當我們用JavaScript程式碼更新Model時,View就會自動更新。因此,我們不需要進行額外的DOM操作,只需要進行Mod

Linux-2 常見的命令——系統管理維護命令

Linux-2 常見的命令——系統管理與維護命令 1、ls命令:顯示指定工作目錄下的內容,列出工作目錄所含的檔案及子目錄。此命令於Windows下的dir類似。Linux也提供了dir命令可以代替ls命令。 -a:顯示指定目錄下的所有檔案及子目錄,包含隱藏檔案“.”開頭的檔案或者目錄視為隱藏

OpenBLAS LAPACK快速上手

1. OpenBLAS 1.1 Build make -j4 make install PREFIX=xxx 1.2 References 1.3 Examples ex

Linux常用命令-系統管理維護

系統管理與維護ls 命令顯示指定工作目錄下的內容語法格式ls [選項] [路徑或檔案]選項說明# -a 顯示所有檔案及子目錄,包含隱藏檔案 # -d 只顯示目錄列表,不顯示檔案 # -l 除檔名稱外,同時將檔案或子目錄的許可權,使用者資訊等詳細列出 # -s 輸出每個檔案的