利用slor實現索引查詢

2021-08-30 01:55:44 字數 1771 閱讀 5727

這裡具體講講在利用solr開發時需要注意的方面。

專案使用的是spring。專案中有乙個solrservice類,它主要負責對索引的操作,像新增索引,更新索引和刪除失效的索引等。專案需要引入apache-solr-solrj-1.3-dev.jar、apache-solr-common-1.3-dev.jar、apache-solr-1.3-dev.jar三個包。

首先在spring的配置檔案裡面配置solrservice類

select f.id as sid,

f.file_name as title,

f.file_size as "size",

f.file_time as time,

f.category_id as c_i,

...from t_file f, t_site s, t_area a where f.site_id=s.id and a.id=s.area_id and f.file_type=0 and f.id order by f.id

注釋已經很詳細了。sqlpart部分的as 什麼什麼,是在solr的配置檔案schema.xml做的型別定義。這裡需要注意的是solr對這些型別定義別名是區分大小寫的,在使用oracle資料庫時需要注意這個問題,因為oracle查詢得到的列名都是大寫的,大小寫不一致會導致查詢不到結果。

在solrservice裡以新增index檔案為例。首先是要從資料庫中得到相應的資料,然後使用solrinputdocument來生成要提交的doc文件物件。

...

// 生成doc

solrinputdocument doc = new solrinputdocument();

doc.addfield(fieldname, fieldvalue);

docslist.add(doc);

...// solrurlurl 為url物件

// 提交

server.commit();

...

solr雖然是基於lucene,但是在處理更新操作時是不同的,lucene沒有更新操作,只能先將相應的索引刪除,然後再新增新的索引。solr則不需要這麼做,如果提交的doc的主鍵已經存在則會做更新操作,不需要我們自己做什麼工作,所以更新操作和新增是一樣的。我們的做法是在做ftp爬蟲時區分哪些資料是更新的,哪些資料是刪除的,然後把它們的主鍵提交到索引檔案裡,當solr的程式啟動時,根據這些主鍵來對索引進行相應的操作。

刪除操作方法如下:

server.deletebyid(id); //根據索引的主鍵刪除

server.deletebyquery("sid:solrdelpks@*"); // 根據查詢刪除

server.commit();

最後需求注意的問題是中文的查詢問題,中文分詞可以採用庖丁分詞,網上有很多介紹。這裡有個問題是在linux下使用tomcat做容器時,在提交中文時會出現亂碼的問題。最終使用的resin才解決了問題 。

在分析查詢結果是採用的是saxreader包。

// url包含有查詢條件 如"...?q=hello&start=100&wt=xml"

document document = saxreader.read(url);

然後就可以對document進行分析得到相應的filed。

利用SQL索引提高查詢速度

1.合理使用索引 索引是資料庫中重要的資料結構,它的根本目的就是為了提高查詢效率。現在大多數的資料庫產品都採用ibm最先提出的isam索引結構。索引的使用要恰到好處,其使用原則如下 field3上沒有索引的情況下 對a作全表掃瞄,結果排序 對b作全表掃瞄,結果排序 結果合併。對於很小的表或巨大的表比...

利用CGI方式實現Web查詢

二 成績查詢系統介紹 乙個在環境下的學生成績公布欄必將成為日後各類成績發布的主要手段,每位學生交將有自己的密碼,所以不必擔心成績上網之後的保密性。任何學生以任何形式上網進入本站點的成績查詢系統之後,只要輸入自己的系列 班別 學號及密碼,便可以利用這個學生績查詢系統查詢自己的成績,該設計思路與系統不僅...

利用CGI方式實現Web查詢

二 成績查詢系統介紹 乙個在www環境下的學生成績公布欄必將成為日後各類成績發布的主要手段,每位學生交將有自己的密碼,所以不必擔心成績上網之後的保密性。任何學生以任何形式上網進入本站點的成績查詢系統之後,只要輸入自己的系列 班別 學號及密碼,便可以利用這個學生績查詢系統查詢自己的成績,該設計思路與系...