什麼是Solr |
多數搜索引擎應用都必須具有某種搜索功能,問題是搜索功能往往是巨大的資源消耗並且它們由於沉重的數據庫加載而拖垮你的應用的性能。
這就是爲什麼轉移負載到一個外部的搜索服務器是一個不錯的主意,Apache Solr是一個流行的開源搜索服務器。
Solr是一個開源搜索平臺,用於構建搜索應用程序。 它建立在Lucene(全文搜索引擎)之上。 Solr是企業級的,快速的和高度可擴展的。
Solr可以和Hadoop一起使用。由於Hadoop處理大量數據,Solr幫助我們從這麼大的源中找到所需的信息。不僅限於搜索,Solr也可以用於存儲目的。像其他NoSQL數據庫一樣,它是一種非關係數據存儲和處理技術。
Solr是一個可擴展的,可部署,搜索/存儲引擎,優化搜索大量以文本爲中心的數據。
IK Analyzer |
IK Analyzer 是一個開源的,基於java 語言開發的輕量級的中文分詞工具包。
IK Analyzer配置:
1、把IKAnalyzer2012FF_u1.jar 添加到 solr 應用lib 目錄下
2、把擴展詞典、停用詞詞典、配置文件放到 solr 應用WEB-INF/classes 目錄下。
3、修改schema.xml 文件,配置一個 FieldType,使用 IKAnalyzer
<fieldType name="text_ik" class="solr.TextField">
<!-- 配置分詞器 -->
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
配置域
域相當於數據庫的表字段,用戶存放數據,因此用戶根據業務需要去定義相關的Field(域),一般來說,每一種對應着一種數據,用戶對同一種數據進行相同的操作。
域的常用屬性:
• name:域的名稱
• type:域的數據類型
• indexed:是否索引
• stored:是否存儲
• required:是否必須
• multiValued:是否多個值
修改solrcore的schema.xml文件,設置業務系統Field(tb_item)
<field name="id" type="long" indexed="true" stored="true" required="true"/>
<field name="goodsId" type="long" indexed="true" stored="true"/>
<field name="title" type="text_ik" indexed="true" stored="true"/>
<field name="price" type="double" indexed="true" stored="true"/>
<field name="image" type="string" indexed="false" stored="true"/>
<field name="category" type="string" indexed="true" stored="true"/>
<field name="seller" type="text_ik" indexed="true" stored="true"/>
<field name="brand" type="string" indexed="true" stored="true"/>
<field name="updateTime" type="date" indexed="true" stored="true"/>
當一個域的名稱不能確定時,我們需要使用動態域。對於品優購,規格域的名稱是不確定的,所以我們需要使用動態域來實現。
<dynamicField name="spec_*" type="string" indexed="true" stored="true"/>
<!-- 唯一的key主鍵 -->
<uniqueKey>id</uniqueKey>
配置solrconfig.xml
註釋所有lib標籤
<!-- <lib path="../a-jar-that-does-not-exist.jar" /> -->
修改 field的名稱
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">keywords</str>
</lst>
......
</requestHandler>
id:id不是String類型,註釋以下內容:
<!--
<searchComponent name="elevator"
class="solr.QueryElevationComponent" >
<str name="queryFieldType">string</str>
<str name="config-file">elevate.xml</str>
</searchComponent> -->