㈠ Error code 500 HTTP_INTERNAL_SERVER_ERROR什麼意思
原因:打開腳本錯誤導致。解決方法:
如下參考:
1.首先,注意路徑是否為:無法為corecollection1載入conf:
載入solrconfigfrom/home/WWW/solr/solr/home/collection1/conf/solrconfig時出錯。XML。
㈡ HTTP 錯誤 500(Internal Server Error):伺服器嘗試執行請求時遇到了意外情況.
1.首先,注意路徑是否為:無法載入confforcorecollection1:
載入solrconfigfrom/home/WWW/solr/solr/home/collection1/conf/solrconfig時出錯。XML。
㈢ solr如何實現多語言搜索
ANT_HOME:E:\Work\apache-ant\1.9.1 (這里為你自己解壓縮的目錄) PATH:%ANT_HOME%\bin (這個設置是為了方便在dos環境下操作)
查看是否安裝成功,在命令行窗口中輸入命令ant,若出現結果:
說明ant安裝成功!因為ant默認運行build.xml文件,這個文件需要我們建立。現在就可以進行build Solr源碼了。在命令行窗口中進入到你的Solr源碼目錄,輸入ant會出現當前build.xml使用提示信息。
其它的先不用管它,我們只要針對我們使用的IDE進行build就行了,如果使用eclipse就在命令行輸入:ant eclipse.如果使用IntelliJ IDEA 就在命令行輸入:ant idea。這樣就能進行build了
㈣ java web 怎麼用solr
我們下載的Solr包後,進入Solr所在的目錄,我們可以看到以下幾個目錄:build、client、dist、example、lib、site、src。下面分別對其進行介紹。
1) build:該目錄是在ant build過程中生成的,其中包含了未被打包成jar或是war的class文件以及一些文檔文件。
2) client:該目錄包含了特定語言的Solr客戶端API,使得使用其他語言的用戶能通過HTTP用XML與Solr進行通話。現在該目錄裡面雖然包含javascript、python、ruby三個子目錄,但是到目前為止只包含一部分的ruby的代碼,其他語言仍是空的。另外,Solr的Java客戶端稱為SolrJ,其代碼位於src/solrj目錄下面。在之後的文章中我會詳細介紹Solr客戶端的使用。
3) dist:該目錄包含build過程中產生的war和jar文件,以及相關的依賴文件。還記得上一篇文章中,我們在build 1.4版本的Solr源代碼後需要部署example嗎?其實就是將該目錄下面的apache-solr-1.4.war部署到Jetty上面去,並重命名為solr.war。
4) example:這個目錄實際上是Jetty的安裝目錄。其中包含了一些樣例數據和一些Solr的配置。
其中一些子目錄也比較重要,這里也對它們稍作介紹。
l example/etc:該目錄包含了Jetty的配置,在這里我們可以將Jetty的默認埠從8983改為80埠。
l 將其中的8983埠換成80埠。注意更改埠後啟動Jetty可能會提示你沒有許可權,你需要使用sudo java -jar start.jar來運行。
l example/multicore:該目錄包含了在Solr的multicore中設置的多個home目錄。在之後的文章中我會對其進行介紹。
l example/solr:該目錄是一個包含了默認配置信息的Solr的home目錄。
詳見下面的「solr home說明」
l example/webapps:Jetty的webapps目錄,該目錄通常用來放置Java的Web應用程序。在Solr中,前面提到的solr.war文件就部署在這里。
5) lib:該目錄包含了所有Solr的API所依賴的庫文件。其中包括Lucene,Apache commons utilities和用來處理XML的Stax庫。
6) site:該目錄僅僅包含了Solr的官網的網頁內容,以及一些教程的PDF文檔。
7) src:該目錄包含了Solr項目的整個源代碼。這里對其各個子目錄也做相應的介紹。
l src/java:該目錄存放的是Solr使用Java編寫的源代碼。
l src/scripts:該目錄存放的是配置Solr伺服器的Unix BashShell腳本,在後面介紹多伺服器配置中將會有重要的作用。
l src/solrj:前面提到過該目錄存放的是Solr的Java版本的客戶端代碼。
l src/test:該目錄存放的是測試程序的源代碼和測試文件。
l src/webapp:該目錄存放的是管理Solr的Web頁面,包括Servlet和JSP文件,其構成了前面提到的WAR文件。管理Solr的JSP頁面在web/admin目錄下面,如果你有興趣折騰Solr可以找到相應的JSP的頁面對其進行設置
1.4.2 Solr home說明
所謂的Solr home目錄實際上是一個運行的Solr實例所對應的配置和數據(Lucene索引)。在上一篇文章中我提到過在Solr的example/solr目錄就是一個Solr用做示例的默認配置home目錄。實際上example/multicore也是一個合法的Solr home目錄,只不過是用來做mult-core設置的。那麼我們來看看example/solr這個目錄裡面都有些什麼。
example/solr目錄下主要有以下一些目錄和文件:
1) bin:如果你需要對Solr進行更高級的配置,該目錄建議用來存放Solr的復制腳本。
2) conf :該目錄下麵包含了各種配置文件,下面列出了兩個最為重要的配置文件。其餘的.txt和.xml文件被這兩個文件所引用,如用來對文本進行特殊的處理。
l conf/schema.xml:該文件是索引的schema,包含了域類型的定義以及相關聯的analyzer鏈。
l conf/solrconfig.xml:該文件是Solr的主配置文件。
l conf/xslt:該目錄包含了各種XSLT文件,能將Solr的查詢響應轉換成不同的格式,如:Atom/RSS等。
3) data:包含了Lucene的二進制索引文件。
4) lib:該目錄是可選的。用來放置附加的Java JAR文件,Solr在啟動時會自動載入該目錄下的JAR文件。這就使得用戶可以對Solr的發布版本(solr.war)進行擴展。如果你的擴展並不對Solr本身進行修改,那麼就可以將你的修改部署到JAR文件中放到這里。
Solr是如何找到運行所需要的home目錄的呢?
Solr首先檢查名為solr.solr.home的Java系統屬性,有幾種不同的方式來設置該Java系統屬性。一種不管你使用什麼樣的Java應用伺服器或Servlet引擎都通用的方法是在調用Java的命令行中進行設置。所以,你可以在啟動Jetty的時候顯式地指定Solr的home目錄java -Dsolr.solr.home=solr/ -jar start.jar。另一種通用的方法是使用JNDI,將home目錄綁定到java:comp/env/solr/home。並向src/webapp/web/WEB-INF/web.xml添加以下一段代碼:
1 <env-entry>
2 <env-entry-name>solr/home</env-entry-name>
3 <env-entry-value>solr/</env-entry-value>
4 <env-entry-type>java.lang.String</env-entry-type>
5 </env-entry>
實際上這段XML在web.xml文件中已經存在,你只需要把原來注釋掉的xml取消注釋,添加你所要指向的home目錄即可。因為修改了web.xml文件,所以你需要運行antdist-war來重新打包之後再部署WAR文件。
最後,如果Solr的home目錄既沒有通過Java系統屬性指定也沒有通過JNDI指定,那麼他將默認指向solr/。
在產品環境中,我們必須設置Solr的home目錄而不是讓其默認指向solr/。而且應該使用絕對路徑,而不是相對路徑,因為你有可能從不同的目錄下面啟動應用伺服器。
註:Jetty 是一個開源的servlet容器,它為基於Java的web內容,例如JSP和servlet提供運行環境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發布。開發人員可以將Jetty容器實例化成一個對象,可以迅速為一些獨立運行(stand-alone)的Java應用提供網路和web連接。
我們先從使用者的角度出發,最先看到的當然是servlet,因為Solr本身是個獨立的網路應用程序,需要在Servlet容器中運行來提供服務,所以servlet是用戶接觸的最外層。我們看看org.apache.solr.servlet包。這個包很簡單,只有兩個類:SolrServlet和SolrUpdateServlet.我們很容易從類名中猜出這兩個類的用途。
SolrServlet類繼承HttpServlet類,只有四個方法:
· init()
· destroy()
· doGet()
· doPost()
SolrServlet類中除了普通的Java類對象(包括Servlet相關的)外,有四個Solr本身的類,還有一個Solr本身的異常。其中兩個類和一個異常屬於org.apache.solr.core包,兩個類屬於org.apache.solr.request包。屬於core包的有:
· Config:
· SolrCore:
屬於request包的有:
· SolrQueryResponse:
· QueryResponseWriter:
分析一下這個SolrServlet類。首先servlet會調用init()方法進行初始化:通過Context查找java:comp/env/solr/home來確定Solr的主目錄(home),接著調用Config.setInstanceDir(home)方法設置這個實例的目錄。然後通過SolrCore.getSolrCore()來獲得一個SolrCore實例。destroy()方法將會在Servlet對象銷毀時調用,僅僅調用core.close()關閉SolrCore實例。
當用戶請求進來時doPost()簡單地將任務交給doGet()完成,主要的任務由doGet()完成。分析一下doGet()方法:
1) 使用SolrCore和doGet()參數request生成一個SolrServletRequest對象(注意:這個SolrServletRequest類不是公開類,位於org.apache.solr.servlet包中,繼承了SolrQueryRequestBase類,僅僅接受SolrCore和HttpServletRequest對象作為參數)
2) 然後SolrCore執行execute()方法(參數為SolrServletRequest和SolrQueryResponse)
由此可見,真正的處理核心是SolrCore的execute方法
㈤ Solr 配置DataImport出錯是什麼原因
可能是jar文件的路徑放錯了,jar文件不應該放在tomcat下的solr的lib里 而在SolrHome里新建lib文件夾把dataimport相關的Jar放進去即可解決。
㈥ 如何得到solr返回的自動提示的欄位信息
方法
solr中設置欄位的文件是在shema.xml中,其中默認的搜索欄位為text,在定義text時候可以看到類別是text_general,這個可以先不關注.
在定義text欄位時候,默認的配置是使用filed命令
<!-- Field commands one field to another at the time a document
is added to the index. It's used either to index the same field differently,
or to add multiple fields to the same field for easier/faster searching. -->
也就是說可以將其他的欄位內容到text上,因此實現刪減到文件內容的欄位,就是反其道而行,將那些的欄位去掉.
找到上面欄位的定義,將其配置stored=false 和Indexed=false如:
<field name="comments" type="text_general" indexed="false" stored="false"/>
㈦ 如何使用solr配置來建立多張表的索引
以下資料整理自網路,以及查看solr幫助文檔。主要分為兩部分,第一部分是對《db-data-config.xml》的配置內容的講解(屬於高級內容),第二部分是DataImportHandler(屬於基礎),第三部分是對db-data-config.xml的進階
第一部分是對《db-data-config.xml》
query是獲取全部數據的SQL
deltaImportQuery是獲取增量數據時使用的SQL
deltaQuery是獲取pk的SQL
parentDeltaQuery是獲取父Entity的pk的SQLFull
Import工作原理:
執行本Entity的Query,獲取所有數據;
針對每個行數據Row,獲取pk,組裝子Entity的Query;
執行子Entity的Query,獲取子Entity的數據。Delta
Import工作原理:
查找子Entity,直到沒有為止;
執行Entity的deltaQuery,獲取變化數據的pk;
合並子Entity
parentDeltaQuery得到的pk;
針對每一個pk
Row,組裝父Entity的parentDeltaQuery;
執行parentDeltaQuery,獲取父Entity的pk;
執行deltaImportQuery,獲取自身的數據;
如果沒有deltaImportQuery,就組裝Query限制:
子Entity的query必須引用父Entity的pk
子Entity的parentDeltaQuery必須引用自己的pk
子Entity的parentDeltaQuery必須返回父Entity的pk
deltaImportQuery引用的必須是自己的pk第二部分是DataImportHandler
關於DataImportHandler的具體使用方法,詳見下文,如果你英文超級好,那看這個鏈接吧:http://wiki.apache.org/solr/DataImportHandler大多數的應用程序將數據存儲在關系資料庫、xml文件中。對這樣的數據進行搜索是很常見的應用。所謂的DataImportHandler提供一種可配置的方式向solr導入數據,可以一次全部導入,也可以增量導入。
概覽
目標
能夠讀取關系資料庫中的數據。
通過可配置的方式,能夠將資料庫中多列、多表的數據生成solr文檔
能夠通過solr文檔更新solr
提供 通過配置文件就能夠導入所有數據的能力
能夠發現並處理
由insert、update帶來的變化(我們假定在表中有一個叫做「last-modified的列」)
能夠配置 「完全導入」和「增量導入」的時間
讓讀取xml文件,並建立索引成為可配置。
能夠將
其他的數據源(例如:ftp,scp,etc)或者其他格式的文檔(Json,csv)以插件的形式集成到項目中。
設計思路
這個Handler首先要在solrconfig.xml文件中配置下,如下所示。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">/home/username/data-config.xml</str>
</lst>
</requestHandler>從它的名字上,我們或許也可以猜到,
DataImportHandler正是requestHandler的實現。我們一共需要在兩個地方配置文件中進行一些配置。
solrconfig.xml 。
data-config.xml必須在這個文件中配置,datasource也可以。不過,一般將datasource放在data-config.xml文件中。
data-config.xml怎樣獲取數據?(查詢語句、url等等)
要讀什麼樣的數據(關系資料庫中的列、或者xml的域)
做什麼樣的處理(修改/添加/刪除)
跟關系資料庫一起使用
下面幾個步驟是必要的.
定義一個data-config.xml 文件,並這個它的路徑配置到solrconfig.xml
中關於DataImportHandler的配置中。
給出Connection的信息(假設你選擇在solrconfig中配置datasource)
打開DataImportHandler頁面去驗證,是否該配置的都配置好了。http://localhost:8983/solr/dataimport
使用「完全導入」命令將數據從資料庫中導出,並提交給solr建立索引
使用「增量導入」命令對資料庫發生的變化的數據導出,並提交給solr建立索引。
配置數據源
將dataSource標簽直接添加到dataConfig下面,即成為dataConfig的子元素.
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/dbname" user="db_username" password="db_password"/>數據源也可以配置在solrconfig.xml中
屬性type 指定了實現的類型。它是可選的。默認的實現是JdbcDataSource。
屬性 name 是datasources的名字,當有多個datasources時,可以使用name屬性加以區分
其他的屬性都是隨意的,根據你使用的DataSource實現而定。
當然 你也可以實現自己的DataSource。
多數據源
一個配置文件可以配置多個數據源。增加一個dataSource元素就可以增加一個數據源了。name屬性可以區分不同的數據源。如果配置了多於一個的數據源,那麼要注意將name配置成唯一的。
例如:
<dataSource type="JdbcDataSource" name="ds-1" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db1-host/dbname" user="db_username" password="db_password"/>
<dataSource type="JdbcDataSource" name="ds-2" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://db2-host/dbname" user="db_username" password="db_password"/>
然後這樣使用 ..
<entity name="one" dataSource="ds-1" ...>
..
</entity>
<entity name="two" dataSource="ds-2" ...>
..
</entity>
..
配置JdbcDataSource
JdbcDataSource中的屬性有
driver(必需的):jdbc驅動名稱
url(必需的):jdbc鏈接
user:用戶名
password:密碼
批量大小:jdbc鏈接中的批量大小
任何其他的在JdbcDataSource中配置的屬性,都會被直接傳給jdbc
driver
配置data-config.xml
solr
document是schema,它的域上的值可能來自於多個表.
data-config.xml的根元素是document。一個document元素代表了一種文檔。一個document元素中包含了一個或者多個root實體。一個root實體包含著一些子實體,這些子實體能夠包含其他的實體。實體就是,關系資料庫上的表或者視圖。每個實體都能夠包含多個域,每個域對應著資料庫返回結果中的一列。域的名字跟列的名字默認是一樣的。如果一個列的名字跟solr
field的名字不一樣,那麼屬性name就應該要給出。其他的需要的屬性在solrschema.xml文件中配置。
為了能夠從資料庫中取得想要的數據,我們的設計支持標准sql規范。這使得用戶能夠使用他任何想要的sql語句。root實體是一個中心表,使用它的列可以把表連接在一起。
dataconfig的結構
dataconfig的結構不是一成不變的,entity和field元素中的屬性是隨意的,這主要取決於processor和transformer。
以下是entity的默認屬性
name(必需的):name是唯一的,用以標識entity
processor:只有當datasource不是RDBMS時才是必需的。默認值是SqlEntityProcessor
transformer:轉換器將會被應用到這個entity上,詳情請瀏覽transformer部分。
pk:entity的主鍵,它是可選的,但使用「增量導入」的時候是必需。它跟schema.xml中定義的uniqueKey沒有必然的聯系,但它們可以相同。
rootEntity:默認情況下,document元素下就是根實體了,如果沒有根實體的話,直接在實體下面的實體將會被看做跟實體。對於根實體對應的資料庫中返回的數據的每一行,solr都將生成一個document。
一下是SqlEntityProcessor的屬性
query (required) :sql語句
deltaQuery : 只在「增量導入」中使用
parentDeltaQuery : 只在「增量導入」中使用
deletedPkQuery : 只在「增量導入」中使用
deltaImportQuery : (只在「增量導入」中使用) .
如果這個存在,那麼它將會在「增量導入」中導入phase時代替query產生作用。這里有一個命名空間的用法${dataimporter.delta.}詳情請看solr1.4.
㈧ 如何用Solr搭建大數據查詢平台
0×00 開頭照例扯淡
自從各種脫褲門事件開始層出不窮,在下就學乖了,各個地方的密碼全都改成不一樣的,重要帳號的密碼定期更換,生怕被人社出祖宗十八代的我,甚至開始用起了假名字,我給自己起一新網名地興才地,這個看起來還不錯的名字,其實是我們家鄉罵人土話,意思是腦殘人士…. -_-|||額好吧,反正是假的,不要在意這些細節。
這只是名,至於姓氏么,每個帳號的注冊資料那裡,照著百家姓上趙錢孫李周吳鄭王的依次往下排,什麼張興才、李興才、王興才……於是也不知道我這樣地興才地了多久,終於有一天,我接到一個陌生電話:您好,請問是馬興才先生嗎?
好么,該來的終於還是來了,於是按名索驥,得知某某網站我用了這個名字,然後通過各種途徑找,果然,那破站被脫褲子了。
果斷Down了那個褲子,然後就一發不可收拾,走上了收藏褲子的不歸路,直到有一天,我發現收藏已經非常豐富了,粗略估計得好幾十億條數據,拍腦袋一想,這不能光收藏啊,我也搭個社工庫用吧……
0×01 介紹
社工庫怎麼搭呢,這種海量數據的東西,並不是簡單的用mysql建個庫,然後做個php查詢select * from sgk where username like 『%xxxxx%』這樣就能完事的,也不是某些幼稚騷年想的隨便找個4g內存,amd雙核的破電腦就可以帶起來的,上面這樣的語句和系統配置,真要用於社工庫查詢,查一條記錄恐怕得半小時。好在這個問題早就被一種叫做全文搜索引擎的東西解決了,更好的消息是,全文搜索引擎大部分都是開源的,不需要花錢。
目前網上已經搭建好的社工庫,大部分是mysql+coreseek+php架構,coreseek基於sphinx,是一款優秀的全文搜索引擎,但缺點是比較輕量級,一旦數據量過數億,就會有些力不從心,並且搭建集群做分布式性能並不理想,如果要考慮以後數據量越來越大的情況,還是得用其他方案,為此我使用了solr。
Solr的基礎是著名的Lucene框架,基於java,通過jdbc介面可以導入各種資料庫和各種格式的數據,非常適合開發企業級的海量數據搜索平台,並且提供完善的solr cloud集群功能,更重要的是,solr的數據查詢完全基於http,可以通過簡單的post參數,返回json,xml,php,python,ruby,csv等多種格式。
以前的solr,本質上是一組servlet,必須放進Tomcat才能運行,從solr5開始,它已經自帶了jetty,配置的好,完全可以獨立使用,並且應付大量並發請求,具體的架構我們後面會講到,現在先來進行solr的安裝配置。
0×02 安裝和配置
以下是我整個搭建和測試過程所用的硬體和軟體平台,本文所有內容均在此平台上完成:
軟體配置: solr5.5,mysql5.7,jdk8,Tomcat8 Windows10/Ubuntu14.04 LTS
硬體配置: i7 4770k,16G DDR3,2T西數黑盤
2.1 mysql資料庫
Mysql資料庫的安裝和配置我這里不再贅述,只提一點,對於社工庫這種查詢任務遠遠多於插入和更新的應用來說,最好還是使用MyISAM引擎。
搭建好資料庫後,新建一個庫,名為newsgk,然後創建一個表命名為b41sgk,結構如下:
id bigint 主鍵 自動增長
username varchar 用戶名
email varchar 郵箱
password varchar 密碼
salt varchar 密碼中的鹽或者第二密碼
ip varchar ip、住址、電話等其他資料
site varchar 資料庫的來源站點
接下來就是把收集的各種褲子全部導入這個表了,這里推薦使用navicat,它可以支持各種格式的導入,具體過程相當的枯燥乏味,需要很多的耐心,這里就不再廢話了,列位看官自己去搞就是了,目前我初步導入的數據量大約是10億條。
2.2 Solr的搭建和配置
首先下載solr:
$ wget
解壓縮:
$ tar zxvf solr-5.5.0.tgz
安裝jdk8:
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
$ sudo apt-get install oracle-java8-set-default
因為是java跨平台的,Windows下和linux下solr是同一個壓縮包,windows下jdk的安裝這里不再說明。
進入解壓縮後的solr文件夾的bin目錄,solr.cmd和solr分別是windows和linux下的啟動腳本:
因為社工庫是海量大數據,而jvm默認只使用512m的內存,這遠遠不夠,所以我們需要修改,打開solr.in.sh文件,找到這一行:
SOLR_HEAP=地512m地
依據你的數據量,把它修改成更高,我這里改成4G,改完保存. 在windows下略有不同,需要修改solr.in.cmd文件中的這一行:
set SOLR_JAVA_MEM=-Xms512m -Xmx512m
同樣把兩個512m都修改成4G。
Solr的啟動,重啟和停止命令分別是:
$ ./solr start
$ ./solr restart –p 8983
$ ./solr stop –all
在linux下還可以通過install_solr_service.sh腳本把solr安裝為服務,開機後台自動運行。
Solr安裝完成,現在我們需要從mysql導入數據,導入前,我們需要先創建一個core,core是solr的特有概念,每個core是一個查詢、數據,、索引等的集合體,你可以把它想像成一個獨立資料庫,我們創建一個新core:
在solr-5.5.0/server/solr子目錄下面建立一個新文件夾,命名為solr_mysql,這個是core的名稱,在下面創建兩個子目錄conf和data,把solr-5.5.0/solr-5.5.0/example/example-DIH/solr/db/conf下面的所有文件全部拷貝到我們創建的conf目錄中.接下來的配置主要涉及到三個文件, solrconfig.xml, schema.xml和db-data-config.xml。
首先打開db-data-config.xml,修改為以下內容:
<dataConfig>
<dataSource name="sgk" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/newsgk" user="root" password="password" batchSize="-1" />
<document name="mysgk">
<entity name="b41sgk" pk="id" query="select * from b41sgk">
<field column="id" name="id"/>
<field column="username" name="username"/>
<field column="email" name="email"/>
<field column="password" name="password"/>
<field column="salt" name="salt"/>
<field column="ip" name="ip"/>
<field column="site" name="site"/>
</entity>
</document>
</dataConfig>
這個文件是負責配置導入數據源的,請按照mysql實際的設置修改datasource的內容,下面entity的內容必須嚴格按照mysql中社工庫表的結構填寫,列名要和資料庫中的完全一樣。
然後打開solrconfig.xml,先找到這一段:
<schemaFactory class="ManagedIndexSchemaFactory">
<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema</str>
</schemaFactory>
把它全部注釋掉,加上一行,改成這樣:
<!-- <schemaFactory class="ManagedIndexSchemaFactory">
<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema</str>
</schemaFactory>-->
<schemaFactory class="ClassicIndexSchemaFactory"/>
這是因為solr5 以上默認使用managed-schema管理schema,需要更改為可以手動修改。
然後我們還需要關閉suggest,它提供搜索智能提示,在社工庫中我們用不到這樣的功能,重要的是,suggest會嚴重的拖慢solr的啟動速度,在十幾億數據的情況下,開啟suggest可能會導致solr啟動載入core長達幾個小時!
同樣在solrconfig.xml中,找到這一段:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">mySuggester</str>
<str name="lookupImpl">FuzzyLookupFactory</str> <!-- org.apache.solr.spelling.suggest.fst -->
<str name="dictionaryImpl">DocumentDictionaryFactory</str> <!-- org.apache.solr.spelling.suggest. -->
<str name="field">cat</str>
<str name="weightField">price</str>
<str name="suggestAnalyzerFieldType">string</str>
</lst>
</searchComponent>
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
把這些全部刪除,然後保存solrconfig.xml文件。
接下來把managed-schema拷貝一份,重命名為schema.xml (原文件不要刪除),打開並找到以下位置:
只保留_version_和_root_節點,然後把所有的field,dynamicField和Field全部刪除,添加以下的部分:
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="username" type="text_ik" indexed="true" stored="true"/>
<field name="email" type="text_ik" indexed="true" stored="true"/>
<field name="password" type="text_general" indexed="true" stored="true"/>
<field name="salt" type="text_general" indexed="true" stored="true"/>
<field name="ip" type="text_general" indexed="true" stored="true"/>
<field name="site" type="text_general" indexed="true" stored="true"/>
<field name="keyword" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<Field source="username" dest="keyword"/>
<Field source="email" dest="keyword"/>
<uniqueKey>id</uniqueKey>
這里的uniqueKey是配置文件中原有的,用來指定索引欄位,必須保留。新建了一個欄位名為keyword,它的用途是聯合查詢,即當需要同時以多個欄位做關鍵字查詢時,可以用這一個欄位名代替,增加查詢效率,下面的Field即用來指定復制哪些欄位到keyword。注意keyword這樣的欄位,後面的multiValued屬性必須為true。
username和email以及keyword這三個欄位,用來檢索查詢關鍵字,它們的類型我們指定為text_ik,這是一個我們創造的類型,因為solr雖然內置中文分詞,但效果並不好,我們需要添加IKAnalyzer中文分詞引擎來查詢中文。在下載IKAnalyzer for solr5的源碼包,然後使用Maven編譯,得到一個文件IKAnalyzer-5.0.jar,把它放入solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目錄中,然後在solrconfig.xml的fieldType部分加入以下內容:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
保存後,core的配置就算完成了,不過要導入mysql數據,我們還需要在mysql網站上下載mysql-connector-java-bin.jar庫文件,連同solr-5.5.0/dist目錄下面的solr-dataimporthandler-5.5.0.jar,solr-dataimporthandler-extras-5.5.0.jar兩個文件,全部拷貝到solr-5.5.0/server/solr-webapp/webapp/WEB-INF/lib目錄中,然後重啟solr,就可以開始數據導入工作了。
㈨ 如何在 Ubuntu 14/15 上配置 Apache Solr-Linux中國
1)System Update 系統更新
使用一個具有 sudo 許可權的非 root 用戶登錄你的 Ubuntu 伺服器,在接下來的所有安裝和使用 Solr 的步驟中都會使用它。
登錄成功後,使用下面的命令,升級你的系統到最新的更新及補丁:
$ sudo apt-get update
2) 安裝 JRE
要安裝 Solr,首先需要安裝 JRE (Java Runtime Environment) 作為基礎環境,因為 solr 和 tomcat 都是基於Java.所以,我們需要安裝最新版的 Java 並配置 Java 本地環境.
要想安裝最新版的 Java 8,我們需要通過以下命令安裝 Python Software Properties 工具包
$ sudo apt-get install python-software-properties
完成後,配置最新版 Java 8的倉庫
$ sudo add-apt-repository ppa:webupd8team/java
現在你可以通過以下命令更新包源列表,使用『apt-get』來安裝最新版本的 Oracle Java 8。
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
在安裝和配置過程中,點擊'OK'按鈕接受 Java SE Platform 和 JavaFX 的Oracle 二進制代碼許可協議Oracle Binary Code License Agreement。
在安裝完成後,運行下面的命令,檢查是否安裝成功以及查看安裝的版本。
kash@solr:~$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
執行結果表明我們已經成功安裝了 Java,並達到安裝 Solr 最基本的要求了,接著我們進行下一步。
安裝 Solr
有兩種不同的方式可以在 Ubuntu 上安裝 Solr,在本文中我們只用最新的源碼包來演示源碼安裝。
要使用源碼安裝 Solr,先要從官網下載最新的可用安裝包。復制以下鏈接,然後使用 'wget' 命令來下載。
$ wget http://www.us.apache.org/dist/lucene/solr/5.3.1/solr-5.3.1.tgz
運行下面的命令,將這個已歸檔的服務解壓到 /bin 目錄。
$ tar -xzf solr-5.3.1.tgz solr-5.3.1/bin/install_solr_service.sh --strip-components=2
運行腳本來啟動 Solr 服務,這將會先創建一個 solr 的用戶,然後將 Solr 安裝成服務。
$ sudo bash ./install_solr_service.sh solr-5.3.1.tgz
Solr 安裝
使用下面的命令來檢查 Solr 服務的狀態。
$ service solr status
Solr 狀態
創建 Solr 集合:
我們現在可以使用 Solr 用戶添加多個集合。就像下圖所示的那樣,我們只需要在命令行中指定集合名稱和指定其配置集就可以創建多個集合了。
$ sudo su - solr -c "/opt/solr/bin/solr create -c myfirstcollection -n data_driven_schema_configs"
創建集合
我們已經成功的為我們的第一個集合創建了新核心實例目錄,並可以將數據添加到裡面。要查看庫中的默認模式文件,可以在這里找到: '/opt/solr/server/solr/configsets/datadrivenschema_configs/conf' 。
使用 Solr Web
可以使用默認的埠8983連接 Apache Solr。打開瀏覽器,輸入 http://your_server_ip:8983/solr 或者 http://your-domain.com:8983/solr. 確保你的防火牆允許8983埠.
http://172.25.10.171:8983/solr/
Web訪問Solr
在 Solr 的 Web 控制台左側菜單點擊 'Core Admin' 按鈕,你將會看見我們之前使用命令行方式創建的集合。你可以點擊 'Add Core' 按鈕來創建新的核心。
添加核心
就像下圖中所示,你可以選擇某個集合並指向文檔來向裡面添加內容或從文檔中查詢數據。如下顯示的那樣添加指定格式的數據。
{
"number": 1,
"Name": "George Washington",
"birth_year": 1989,
"Starting_Job": 2002,
"End_Job": "2009-04-30",
"Qualification": "Graation",
"skills": "Linux and Virtualization"
}
添加文件後點擊 'Submit Document'按鈕.
㈩ jsp與solr結合實現網站搜索,怎麼弄
Solr是使用Ant進行管理的源碼, Ant是一種基於Java的build工具。理論上來說,它有些類似於Maven 或者是 C中的make。下載後解壓出來後,進行環境變數設置。
ANT_HOME:E:\Work\apache-ant\1.9.1 (這里為你自己解壓縮的目錄) PATH:%ANT_HOME%\bin (這個設置是為了方便在dos環境下操作)
查看是否安裝成功,在命令行窗口中輸入命令ant,若出現結果:
說明ant安裝成功!因為ant默認運行build.xml文件,這個文件需要我們建立。現在就可以進行build Solr源碼了。在命令行窗口中進入到你的Solr源碼目錄,輸入ant會出現當前build.xml使用提示信息。
其它的先不用管它,我們只要針對我們使用的IDE進行build就行了,如果使用eclipse就在命令行輸入:ant eclipse.如果使用IntelliJ IDEA 就在命令行輸入:ant idea。這樣就能進行build了。
黑窗口裡提示這個。。。
失敗。。。為什麼呢,最後我發現是因為下載的ant中少了一個jar就是這apache-ivy(下載地址:http://ant.apache.org/ivy/)這東東名子真怪 ivy是ant管理jar依賴關系的。當第一次bulid時ivy會自動把build中的缺少的依賴進行下載。網速慢的第一次build要好久的。。。
下載一個jar就行把jar放到ant的lib下(E:\Work\apache-ant\1.9.1\lib)這樣再次運行ant 就會成功了。到現在才可以進行Solr的代碼調試。
4.4配置並運行Solr代碼
不管用什麼IDE首選都要設置Solr Home在IDE的JVM參數設置VM arguments寫入 -Dsolr.solr.home=solr/example/solr一般就行了.不行也可以使用絕對路徑.
solr使用StartSolrJetty文件作為入口文件進行調試代碼,在這里可以設置伺服器使用的埠和solr的webapps目錄.一般都不用設置,默認的就可以進行調試.Solr Home也能可在代碼中設置一樣好用. System.setProperty("solr.solr.home", "E:\\Work\\solr-4.2.0-src-idea\\solr\\example\\solr");
目前是使用自帶的一個example作為solr配置的根目錄,如果你有其他的solr配置目錄,設置之即可。點擊run即可,debug也是一樣可以用了。沒有別的問題就應該能運行了.注意servlet 容器使用的埠,如查提示:
FAILED [email protected]:8983: java.net.BindException: Address already in use: JVM_Bind 就說明當前埠佔用中.改一下就可以了.如果沒有報錯啟動成功後就可以在瀏覽器中輸入地址: http://localhost:8983/solr/ 就可以看到如下界面
到這里Solr就成功配置並運行了.要是想跟代碼調試在啟動時在這個方法里點斷點就可以Initializer的initialize()方法如果想從瀏覽器中找斷點調試就要到SolrDispatchFilter的doFilter方法中點斷點了.
註:IE9在兼容模式下有bug,必須設置為非兼容模式。
5.Solr基礎
因為 Solr 包裝並擴展了Lucene,所以它們使用很多相同的術語。更重要的是,Solr 創建的索引與 Lucene 搜索引擎庫完全兼容。通過對 Solr 進行適當的配置,某些情況下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Lucene 應用程序中的索引。在 Solr 和 Lucene 中,使用一個或多個 Document 來構建索引。Document 包括一個或多個 Field。Field 包括名稱、內容以及告訴 Solr 如何處理內容的元數據。