Apache Solr入門教程(轉)

1.爲何選擇Apache Solr

Apache Solr是一個功能強大的搜索服務器,它支持REST風格API。Solr是基於Lucene的,Lucene 支持強大的匹配能力,如短語,通配符,鏈接,分組和更多不一樣的數據類型。它使用 Apache Zookeeper特別針對高流量進行優化。Apache Solr提供各式各樣的功能,咱們列出了部分最主要的功能。html

  1. 先進的全文搜索功能。
  2. XML,JSON和HTTP - 基於開放接口標準。
  3. 高度可擴展和容錯。
  4. 同時支持模式和無模式配置。
  5. 分頁搜索和過濾。
  6. 支持像英語,德語,中國,日本,法國和許多主要語言
  7. 豐富的文檔分析。

2.安裝Apache Solr

要首先讓從如下位置下載最新版本的Apache Solr:java

http://lucene.apache.org/solr/downloads.htmlapache

在撰寫本文時,可用的穩定版本是5.0.0。Apache Solr經歷了從4.XX到5.0.0各類變化了,因此若是你有不一樣版本的Solr,你須要下載5.xx版本並以此爲模板。瀏覽器

一旦Solr的zip文件下載將它解壓縮到一個文件夾。提取的文件夾看起來像下面。服務器

 

Solr的文件夾架構

bin文件夾中包含用來啓動和中止服務器的腳本。example 文件夾包含幾個示例文件。咱們將使用其中的一種,以說明Solr如何索引數據。server 文件夾包含logs 文件夾,全部的Solr的日誌都寫入該文件夾。這將有助於索引過程來檢查任何錯誤日誌。在sever文件夾下的Solr文件夾包含不一樣的集合或核心(core/collection)。對於各集合或核心的配置和數據都存儲在相應的集合或核心文件夾。併發

Apache Solr帶有一個內置的Jetty服務器。但在咱們開始以前,咱們必須驗證JAVA_HOME已經配置。工具

咱們可使用命令行腳本啓動服務器。讓咱們去solr的bin目錄,從命令提示符輸入出如下命令post

solr start

這將啓動下的默認端口8983 Solr的服務器。優化

如今,咱們能夠在瀏覽器中打開如下網址和驗證,咱們的Solr的實例正在運行。solr的管理工具的細節超出了示例的範圍。

http://localhost:8983/Solr/

 

Solr管理控制檯

3.配置Apache Solr

在本節中,咱們將告訴你如何配置的核心/集合做爲Solr實例,以及如何定義的字段。Apache Solr附帶稱爲無模式模式的選項。這個選項容許用戶構建有效的架構,而無需手動編輯模式文件。可是,在這個例子中,咱們將使用架構配置理解Solr的內部。

3.1創建核心(core)

當Solr的服務器在獨立模式下啓動的配置稱爲核心,當它在SolrCloud模式啓動的配置稱爲集合。在這個例子中,咱們將有關獨立服務器和核心討論。咱們將在之後再討論SolrCloud。首先,咱們須要建立一個核心的索引數據。Solr的建立命令有如下選項:

  1. -c <name> -要建立的核心或集合的名稱(必需)。
  2. -d <confdir> -配置目錄,在SolrCloud模式很是有用。
  3. -n <configName> -配置名稱。這將默認爲核心或集合的名稱。
  4. -p <port> -本地Solr的實例的端口發送create命令; 默認腳本試圖經過尋找運行Solr的實例來檢測端口。
  5. -s <shards> -Number of shards to split a collection into, default is 1.
  6. -rf <replicas> -集合中的每一個文件的份數。默認值是1。

在這個例子中,咱們將使用的核心名稱和配置目錄-d參數-c參數。對於全部其它參數咱們使用默認設置。

如今在命令窗口瀏覽 solr-5.0.0\bin文件夾,併發出如下命令。

solr create -c jcg -d basic_configs

咱們能夠看到在命令窗口中下面的輸出。

Creating new core 'jcg' using command:

http://localhost:8983/solr/admin/cores?action=CREATE&name=jcg&instanceDir=jcg

 {

 "responseHeader":{

 "status":0,

 "QTime":663},

 "core":"jcg"}

 

如今咱們導航到如下網址,咱們能夠看到JCG核心被填充在覈心選擇器上。還能夠看到核心的統計信息。

http://localhost:8983/Solr

Solr的核心JCG

3.2修改Schema.xml文件

咱們須要修改schema.xml中文件的文件夾下,server\solr\jcg\conf包含的字段。咱們將使用隨Solr的安裝索引附帶的示例文件「books.csv」之一。該文件所在的文件夾下  的solr-5.0.0\example\exampledocs

如今,咱們定位到該文件夾  server\solr目錄。你會看到一個名爲JCG的文件夾被建立。子文件夾conf和data分別擁有核心的配置和索引的數據。

如今編輯\server\solr\jcg\conf\server\solr\jcg\conf\schema.xml文件,設置惟一元素後添加如下內容。

schema.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
< uniqueKey >id</ uniqueKey >
 
<!-- Fields added for books.csv load-->
 
< field  name="cat" type="text_general" indexed="true" stored="true"/>
 
< field  name="name" type="text_general" indexed="true" stored="true"/>
 
< field  name="price" type="tdouble" indexed="true" stored="true"/>
 
< field  name="inStock" type="boolean" indexed="true" stored="true"/>
 
< field  name="author" type="text_general" indexed="true" stored="true"/>

  

咱們已經設置了屬性索引爲true。這指定字段用於索引和記錄可使用索引進行檢索。該值設置爲false將只存儲領域,但不能進行查詢。

另外請注意另外一個屬性stored並將其設置爲true。這指定字段被存儲,而且能夠在輸出被返回。將此字段設置爲假將使字段惟一索引,而且不能在輸出進行檢索。

咱們已經分配給存在於此處的「books.csv」文件中的字段的類型。在CSV文件「ID」第一場由索引Schema.xml文件的惟一鍵自動元素的照顧。若是你注意,咱們已經略過字段series_t,sequence_i和genre_s未作任何條目。可是,當咱們執行索引時,全部這些字段都被索引且沒有任何問題。若是你想知道這種狀況須要在Schema.xml文件的dynamicField部分一探究竟。

schema.xml

複製代碼
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>

<dynamicField name="*_is" type="ints" indexed="true" stored="true"/>

<dynamicField name="*_s" type="string" indexed="true" stored="true" />

<dynamicField name="*_ss" type="strings" indexed="true" stored="true"/>

<dynamicField name="*_l" type="long" indexed="true" stored="true"/>

<dynamicField name="*_ls" type="longs" indexed="true" stored="true"/>

<dynamicField name="*_t" type="text_general" indexed="true" stored="true"/>

<dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>

<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>

<dynamicField name="*_bs" type="booleans" indexed="true" stored="true"/>

<dynamicField name="*_f" type="float" indexed="true" stored="true"/>

<dynamicField name="*_fs" type="floats" indexed="true" stored="true"/>

<dynamicField name="*_d" type="double" indexed="true" stored="true"/>

<dynamicField name="*_ds" type="doubles" indexed="true" stored="true"/>
複製代碼

 

既然咱們已經修改了配置,咱們必須中止和啓動服務器。要作到這一點,咱們須要經過命令行發出從bin目錄下面的命令。

Solr  stop -all

服務器將中止如今。如今啓動服務器問題從bin目錄中經過命令行運行如下命令。

Solr start

4.索引數據

Apache Solr帶有一個叫作SimplePostTool獨立的Java程序。這個程序被打包成JAR,在安裝目錄下 example\exampledocs可看到。

如今,咱們在命令行定位到example\exampledocs文件夾,而後鍵入如下命令。你會看到一堆選項,使用的工具。

Java -jar post.jar -h

在通常的使用格式以下用途:

Usage: java [SystemProperties] -jar post.jar [-h|-] [<file|folder|url|arg>

[<file|folder|url|arg>...]]

正如咱們前面所說,咱們將索引「books.csv」文件中的數據。咱們將導航到solr-5.0.0\example\exampledocs在命令提示符併發出如下命令。

java -Dtype=text/csv -Durl=http://localhost:8983/solr/jcg/update  -jar post.jar   books.csv

這裏使用的SystemProperties是:

  1. -dtype - 數據文件的類型。
  2. -Durl - JCG核心的地址。

文件「books.csv」如今將索引和命令提示符將顯示如下輸出。

SimplePostTool version 5.0.0

Posting files to [base] url http://localhost:8983/solr/jcg/update using content-

type text/csv...

POSTing file books.csv to [base]

1 files indexed.

COMMITting Solr index changes to http://localhost:8983/solr/jcg/update...

Time spent: 0:00:00.647

 

如今咱們導航到如下網址並選擇核心JCG。

http://localhost:8983/solr

 

Solr的JCG核心數據

就拿在統計部分仔細一看,該民文檔參數將顯示索引的行數。

5.訪問索引的文檔

Apache Solr提供了一種基於REST API來訪問的數據,並還提供了不一樣的參數,以檢索數據。咱們將向您展現一些基於場景的查詢。

5.1按名稱搜索

咱們將用它的名字檢索書的細節。要作到這一點,咱們將使用下面的語法。URL中的參數「Q」是查詢事件。

打開瀏覽器下列URL。

http://localhost:8983/solr/jcg/select?q=name:"A Clash of Kings"

輸出將在下面,如圖所示。

 

按名稱SOLR

5.2首字母搜索

如今咱們將告訴你如何搜索記錄,若是咱們只知道起始字母或單詞,不記得完整的標題。咱們能夠用下面的查詢檢索結果。

http://localhost:8983/solr/jcg/select?q=name:"A"

輸出將列出全部的書籍字母A盯着

 

Solr的首字母

5.3搜索使用通配符

Solr的支持通配符搜索。咱們將下面的展現如何檢索全部書名包含「of」的書。

http://localhost:8983/solr/jcg/select?q=name:"*of"

 

 

Solr的通配符搜索

5.4搜索使用的條件

Solr的支持條件的搜索。咱們能夠設置條件,咱們的查詢提供了「FQ」參數。在下面咱們將告訴你如何查詢價格低於¥6的書。

http://localhost:8983/solr/jcg/select?q=*&fq=price:[0 TO 6]

輸出將只列出這是低於$ 6的書籍。

 

Solr搜索條件

6. Solr的客戶端API的

有不一樣的客戶端API的可用來鏈接到Solr的服務器。咱們列出了一些普遍使用的Solr客戶端API的。

  1. SolRuby – To connect from Ruby
  2. SolPHP – To connect from PHP
  3. PySolr – To connect from Python
  4. SolPerl – To connect from Perl
  5. SolrJ – To connect from Java
  6. SolrSharp – To connect from C#

此外,Solr還提供了JavaScript能夠直接使用的基於REST的API。

相關文章
相關標籤/搜索