Lucene和solr基礎介紹

       solr是對lucene的封裝:
                1.lucene能夠完成的功能,使用solr能夠用更簡單更方便的方法完成一樣的功能。
Like  :  順序掃描法
        從文檔頭一直掃描到文檔尾,直到找到爲止,速度很慢。
全文檢索技術(倒排索引):
        做用:
                1.能夠幫咱們實現;相似於百度或者谷歌同樣的搜索引擎
                2.能夠幫咱們實現相似京東或淘寶同樣的站內商品搜索功能
                3.能夠幫咱們實現;相似貼吧或者論壇等一些站內搜索帖子的功能
                4.能夠幫咱們實現相似智能客服的功能
                5.智能機器人
        原理(特色):
                1.在搜索以前,先對關鍵詞進行分詞
                2.索引庫:文檔集合、索引目錄    
                        a:增長文檔的時候先對文檔進行分詞
                        b:將分的詞放入索引目錄中,並記錄該詞在哪些文檔中出現了多少次
                        c:根據關鍵詞分的詞到索引庫中去惟一匹配速度很是快。
                3.相關度排序:
                        a:一個詞在這個文檔中出現的次數越多,排序越靠前。
                4.一個詞在不少文檔中都出現了,那麼就會下降這個詞的權重值。
 
數據查詢的方法:
        順序掃描法
        倒排索引
 
添加流程:
        1.採集數據,從數據庫中獲取。
        2.建立文檔對象Document
        3.建立域來存儲要帶出來的值。使用對象 Field   (new  TextField),須要帶出來的幾個值,就建立幾個域對象。
        4.將建立出來的域放入到文檔對象中。
        5.建立一個文檔對象的集合。將每一次裝好的文檔對象放入到集合中。
        6.建立IndexWriter對象,用來寫入對象到索引庫,須要的參數是:
                a: 索引庫要存儲的地方,一個磁盤目錄對象(Directory,一個接口,使用子類對象FSDirectory,磁盤對象)。
                b: 一個能夠寫入索引配置的對象。IndexWriterConfig對象。參數是一個是版本信息(Version.?),參數二是一個分詞器對象。
        7.建立Directory對象、IndexWriterConfig對象。由於IndexWriterConfig對象的參數須要一個分詞器對象。因此...
        8.建立分詞器對象。Analyzer,也是一個接口,子類:StandardAnalyzer();這個子類只對英文分詞有效。因此國人寫了一個對中文有效的分詞器對象  IKAnalyzer對象。
        9.將拿到的全部的文檔對象寫入到索引庫中,使用IndexWriter對象添加Document對象。
        10.提交、關流。IndexWriter是一個流對象
查詢流程:
        1.建立語法解析器QueryParser對象
                參數一:從哪一個域值裏面查
                參數二:分詞器
        2.建立查詢語法Query對象,使用語法解析器對象調用parse方法,執行查詢語句,返回Query對象
        3.建立讀索引的對象IndexReader,是一個接口,須要調用open方法來建立讀索引的對象。
                參數是:建立磁盤對象,找到索引庫的位置,調用的是open方法
        4.建立查詢對象IndexSearcher.
        5.執行Query對象,使用search方法
                參數一:查詢語句對象
                參數二:顯示幾條
        6.查詢打過度的文檔集合。使用TopDocs對象調用scoreDocs方法。返回一個數組。裏面裝的是要顯示的前幾條文檔。
        7.使用indexSercher對象調用doc方法,經過Luncene自動生成的文檔id來查找文檔。(查找id等屬性用的是索引庫中的屬性名來查找的)
        8.關流
 
分詞器的使用時機:
        1.在建立索引庫的時候
        2.在查詢的時候
 
 
通用Mapper:
       接口繼承Mapper接口,不用寫方法,Mapper接口裏面提供了方法,能夠進行單表的查詢。若是想要進行多表的關聯查詢。能夠本身自定義xml。實體類:加註解,類上:@Table 若是類名和數據庫的名字同樣的話能夠不加這個註解。屬性的話:@Column  若是實體類的屬性名和數據庫的屬性名一致則能夠不寫這個註解。主鍵:加@Id註解,還有主鍵生成策略。加註解@GeneratedValue(strategy=GenerationType.IDENTITY)主鍵自增
 
 
 
 
 
 
 
查詢
 
 
 
Lucene的field域
        咱們用到的每個域,都須要考慮三件事情
                1.是否須要分詞
                        目的:建立索引
                2.是否須要索引
                        目的:快速搜索
                3.是否須要存儲
                        目的:是否在前臺顯示
 
TextField:文本和流類型
        必須分詞、必須索引
數字域:(IntField、LongField、doubleField、FloatField)
        必須分詞:lucene對數據域採用的是一種特殊的分詞方法,這種分詞方法可讓數字域比較大小更快。lucene底層規定死的
        必須索引
StringField:文本域,通常用於做爲一個惟一總體,進行建立索引,通常用於主鍵id
        必須不分詞
        必須索引 
StoredField:存儲域
        必須不分詞
        必須不索引
        必須存儲
 
2.lucene的維護
        lucene其實沒有所謂的修改功能,其實所謂的修改功能就是先刪除後添加
 
查詢的第一種方式
        1.使用QueryParser對象建立Query對象來查詢
                能夠指定默認域和使用分詞域
        2.直接建立TermQuery對象來查詢、
                不能指定默認域,也不可使用分詞,不經常使用
        3.數字範圍查詢
                NumericRangeQuery不能夠直接new對象,須要調用.new...方法建立對象
        4.組合查詢
                BooleanQuery:
        5.指定多個默認搜索域
                MultiFieldQueryParser
 
相關度排序:
        Term  Frequency (tf):一個次在一片文檔中出現的次數越多權重越高
        Doucment  Frequency(df):一個詞在多少文檔中出現了,出現的文檔越多,改詞的權值越低
        權重值沒有最大,只有更大
        設置權重值:
                域 . setBoost(值);
 
 
solr介紹:模糊查詢的時候使用solr
        全文檢索系統,對外提供的http服務
                1.solr能夠直接部署到web容器裏面。對外提供對說衣褲增刪改查的api
                2.要麼你可使用solrJ客戶端調用solr的api完成對索引庫的增刪改查的api
 
 
solr的環境搭建:
        1.準備一臺tomcat,並更改端口號,三個端口號
       2.把解壓後的solr項目拷貝到tomcat/wabapps下
        3.將example/lib/ext下的日誌jar包拷貝到solr項目的lib裏
        4.將example/solr拷貝出來並更名爲solrHome(隨意)
        5.在solr項目 
 
web客戶介紹     
Solr能夠有多個索引庫
Solr的添加修改使用步驟:
        1.建立solr服務,SolrServer server = new HttpSolrServer(solr索引庫的地址,瀏覽器上的);默認指定第一個索引庫。
        
        
        2.進行添加文檔。使用add方法。參數須要SolrInputDocument對象。
        3.建立SolrInputDocument對象
        4.添加域。
        5.返回response。
        6.提交
Solr的刪除:
        1.建立solr服務,SolrServer server = new HttpSolrServer(solr索引庫的地址,瀏覽器上的);默認指定第一個索引庫。
      
        2.經過id刪除deleteById("id");
        or
           刪除全部deleteByQuery("*:*");
        3.提交
Solr的查詢:
        1.建立solr服務
        
        2.建立查詢語句對象  SolrQuery
        3.設置查詢關鍵詞
        4.執行query對象
        5.獲取結果集(拿到的是一個集合)
        6.遍歷
相關文章
相關標籤/搜索