1. 程式人生 > >solr 索引庫的維護

solr 索引庫的維護

一、配置中文分析器:IK-analyzer,在FieldType中指定中文分析器:
1 複製IK-analyzer到你的伺服器指定目錄中。
2 在該目錄中,我們需要的東西有:IKAnalyzer的jar包,IKAnalyzer.cfg.xml,mydict.dic和ext_stopword.dic
3 需要把這個jar包新增到solr工程中:
cd IKAnalyzer/

cp IKAnalyzer.jar /home/wangchao/solr/apache-tomcat-8.0.46/webapps/solr/WEB-INF/lib/
4 需要把擴充套件詞典和停用詞詞典和配置檔案複製到solr工程的classpath中:
cd /home/wangchao/solr/apache-tomcat-8.0.46/webapps/solr/WEB-INF

mkdir classes

cp IKAnalyzer.cfg.xml mydict.dic ext_stopword.dic /home/wangchao/solr/apache-tomcat-8.0.46/webapps/solr/WEB-INF/classes
5 注意擴充套件詞典和停用詞詞典必須是UTF-8的,不能使用windows的記事本編輯。
6 配置FieldType,需要在solr_home/colection1/conf/schema.xml中配置,在最底部新增擴充套件的IKAnalyzer:
cd /home/wangchao/solr/solr_home/collection1/conf

vi schema.xml:
#specified ik analyzer
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

二、定義solr的業務欄位,與你想要進行索引的欄位進行繫結:
1 根據你的資料庫情況,將你需要進行索引的欄位繫結:
<field name="article_title" type="text_ik" indexed="true" stored="true" />
<field name="article_content" type="text_ik" indexed="true" stored="true" />
<field name="article_time" type="text_ik" indexed="true" stored="true" />
<field name="news_type" type="text_ik" indexed="true" stored="true" />
<field name="article_keywords" type="text_ik" indexed="true" stored="false" multiValued="true" />
<copyField source="article_title" dest="article_keywords"/>
<copyField source="article_content" dest="article_keywords"/>
<copyField source="article_time" dest="article_keywords"/>
<copyField source="news_type" dest="article_keywords"/>
注:部分schema.xml的關鍵詞的意義,在另外一個文件中,名叫“solr的schema.xml配置檔案關鍵詞意義”。
2 重啟tomcat
三、solr管理介面的使用:
1 重要的功能:
Documents:
可以新增相應的索引內容。
Query:
q:查詢條件: *:* 表示查詢所有域;article:xx 指定你想要查詢的域(此處是article)。
fl:返回域, 預設所有域。
df:預設搜尋域,可以指定為article_keywords。
hl.simple.pre和hl.simple.post:高亮域。
sort:排序域。
start,rows:開始指定行。
四、索引庫的維護:
1 增加:
直接使用Documents新增。
2 修改:
沒有update,只用新增一個相同ID的索引即可,原理是先刪除,後新增。
3 刪除兩種方法:
1<delete>
<id>xxx</id>//指定索引的ID
</delete>
<commit/>
2根據查詢刪除:
<delete>
<query>*:*</query>//刪除所有
</delete>
<commit/>
五、將資料庫的內容與solr業務欄位關聯並且進行索引儲存:
1 第一種方式:Dataimport
2 使用程式碼:
1Solrj客戶端的使用:
1需要依賴solrj的jar包。
2進行簡單測試,使用solrj新增文件:
public void addDocument() throws Exception{
String baseUrl="http://39.108.75.175:8082/solr";
SolrServer solrServer=new HttpSolrServer(baseUrl);
//建立一個文件物件
SolrInputDocument solrInputDocument=new SolrInputDocument();
solrInputDocument.addField("id","test001");
solrInputDocument.addField("article_title","新聞測試");
solrInputDocument.addField("article_content","新聞內容啊啊啊");
//把文件物件寫入索引庫
solrServer.add(solrInputDocument);
//提交
solrServer.commit();
}
3刪除文件:
public void deleteDocument() throws Exception{
//建立連線
SolrServer solrServer=new HttpSolrServer();
//solrServer.deleteById("");//給定索引ID
solrServer.deleteByQuery("*:*");//通過查詢刪除
//提交
solrServer.commit();
}
2把新聞資訊匯入到索引庫中:
1 使用java程式讀取mysql資料庫中的商品資訊,然後建立solr文件物件,將這個商品資訊寫入索引庫。
2 建立一個搜尋的服務工程來發布服務:deepbreath-search:
3 具體業務邏輯根據需求來做
3 使用搜索引擎:
1 查詢:
public void queryDocument() throws Exception{
//建立連線
SolrServer solrServer=new HttpSolrServer();
//設定查詢條件
SolrQuery query=new SolrQuery();
query.setQuery("*:*");
//查詢條件
query.setStart(20);
query.setRows(50);
//執行查詢
QueryResponse response=solrServer.query(query);
SolrDocumentList list=response.getResults();
for(SolrDocument document:SolrDocumentList){

}
}
2 整合Dao:

3 整合Service:
1 查詢的結果封裝為一個pojo物件
2 查詢的結果的SolrQuery應該有這些內容:分頁、預設搜尋域、高亮