日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Data Solr教程:Solr简介

發布時間:2023/12/3 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Data Solr教程:Solr简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大多數應用程序必須具有某種搜索功能。 問題在于搜索功能通常是巨大的資源消耗,它們可能通過給數據庫造成沉重的負擔而破壞我們應用程序的性能。 因此,將負載轉移到外部搜索服務器是個好主意。

這是我的Spring Data Solr教程的第一部分。 在本教程中,我們將對todo應用程序實現搜索功能,這是我的Spring MVC Test教程的示例應用程序。

我們搜索功能的要求很簡單。 它必須返回一個待辦事項列表,其標題或說明包含使用的搜索詞。 搜索結果
頁面還必須提供指向用于查看待辦事項信息的頁面的鏈接。

在開始執行搜索功能之前,我們需要看一下Solr搜索服務器。 此博客條目為我們提供了有關Solr的基本信息,分為三個部分:

  • 第一部分為我們簡要介紹了Solr及其數據模型。
  • 第二部分描述了如何為Solr實例創建模式。
  • 最后一部分描述了如何使用Solr提供的類似REST的HTTP API。

讓我們開始吧。

Solr簡介

首先讓我們簡要介紹一下Solr搜索服務器。 本簡介非常薄,僅提供我們需要了解的信息,以了解我們搜索功能的實現。

同樣,即使Solr嚴重依賴Lucene ,此博客條目也沒有區別。

本節介紹

  • Solr搜索服務器的數據模型。
  • 將新文檔添加到Solr后會發生什么。
  • 對索引數據執行搜索查詢時會發生什么。

數據模型

索引由本質上是字段集合的文檔組成。 如果我們將此數據模型與關系數據庫的數據模型進行比較,則會發現以下相似之處:

  • 索引與數據庫表大致相同。
  • 文檔與數據庫表的一行相似。
  • 字段的含義與數據庫表的列相同。

文檔的每個字段都可以被索引 , 存儲或兩者都被索引 。 這些術語的含義如下所述:

  • 索引字段是可搜索和可排序的字段。 在搜索結果中不返回索引字段。
  • 存儲的字段是在搜索結果中返回其值的字段。
  • 如果一個字段既被索引又被存儲 ,則該字段既可搜索又可排序。 其值也會在搜索結果中返回。

向索引添加信息

將新文檔添加到Solr后,以不同的方式處理索引字段和存儲字段。 下面描述了這種差異:

  • 索引字段經過分析階段,該階段通常將文本分解為單詞并對其應用不同的轉換。 該分析階段的結果將保存到Solr索引中。
  • 存儲的字段的值按原樣保存。

從索引中搜索信息

搜索功能可分為以下三個步驟:

  • 通常,搜索查詢所經歷的分析階段與索引字段相似。 這樣做的目的是確保搜索查詢與索引的內容匹配。
  • Solr使用其索引執行搜索。
  • 匹配的文檔以請求的格式返回。 每個文檔都包含其存儲字段的值。

創建模式

該架構用于配置以下內容:

  • 文檔的字段。
  • 將新文檔添加到索引時,如何處理文檔的字段。
  • 對索引執行搜索時如何處理字段。

該模式是在名為schema.xml的文件中配置的,我們可以按照以下步驟為我們的應用程序創建模式:

  • 配置使用的字段類型。
  • 配置我們文檔的字段。
  • 配置復制字段。
  • 配置文檔的唯一鍵字段。
  • 在以下小節中將更詳細地描述這些步驟。 Solr實例的框架架構如下所示:

    <?xml version="1.0" encoding="UTF-8" ?> <schema name="todo" version="1.5"><fields><!-- Configure fields here --></fields><!-- Configure unique key --><!-- Configure copy fields here --><types><!-- Configure field types here --></types> </schema>

    注意 :本節描述了我的博客條目“ 使用Maven運行Solr ”的示例應用程序的架構。

    配置字段類型

    字段類型指定以下內容:

    • 字段的數據類型。
    • 將信息添加到索引后如何對其進行分析。
    • 從索引中搜索信息時如何處理信息。

    我們可以使用fieldType元素配置字段類型。 下面描述了在我們的模式中使用的其屬性:

    • name屬性說明字段類型的名稱。 它基本上是一個別名,用于聲明字段的類型。
    • class屬性聲明實現所涉及字段類型的類。
    • sortMissingLast屬性指定當缺少此字段的值時如何進行排序。 如果此屬性的值設置為“ true”,則最后返回在相關字段中沒有值的文檔。
    • positionIncrementGap屬性聲明在同一文檔的多個字段之間放置的空白空間。 此屬性的值用于多值字段,其思想是防止跨不同字段的錯誤匹配。
    • precisionStep屬性用于數字字段的范圍查詢。 通過閱讀NumericRangeQuery類的API文檔,我們可以獲得有關此信息的更多信息。

    我們可以按照以下步驟配置架構的字段類型:

  • 配置長字段的字段類型
  • 配置字符串字段的字段類型
  • 為包含文本的字段配置字段類型
  • 下面將更詳細地描述這些步驟。

    配置長字段的字段類型

    讓我們從為未在索引或搜索階段進行分析的長字段配置簡單字段類型開始。 我們可以按照以下步驟配置此字段類型:

  • 將字段類型的名稱設置為“ long”。
  • 將實現類的名稱設置為“ solr.TrieLongField”。
  • 將precisionStep屬性的值設置為零。
  • 將positionIncrementGap屬性的值設置為零。
  • 我們的字段類型聲明如下所示:

    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>

    配置字符串字段的字段類型

    下一步是為在索引或搜索階段未分析的字符串字段配置簡單的字段類型。 我們可以按照以下步驟配置此字段類型:

  • 將字段類型的名稱設置為“字符串”。
  • 將實現類的名稱設置為“ solr.StrField”。
  • 將sortMissingLast屬性的值設置為'true'。
  • 我們的字符串字段的聲明如下所示:

    <fieldType name="string" class="solr.StrField" sortMissingLast="true" />

    為包含文本的字段配置字段類型

    最后一步是配置text_general字段類型。 我們可以按照以下步驟進行操作:

  • 創建一個新的字段類型。 將字段類型的名稱設置為“ text_general”。 將實現類的名稱設置為“ solr.TextField”。 將positionIncrementGap的值設置為100。
  • 創建一個在索引時間運行的新分析器。 使用Unicode文本分段算法的分詞規則配置將文本分成單詞。 創建一個過濾器,以從文本中刪除從stopwords.txt文件中找到的單詞。 將文本轉換為小寫。
  • 創建一個在查詢階段運行的新分析器。 配置使用Unicode文本分段算法的分詞規則將搜索查詢分解為多個詞 。 創建一個過濾器,以從搜索查詢中刪除從stopwords.txt文件中找到的單詞。 確保已應用從onymous.txt找到的同義詞 。 將搜索查詢轉換為小寫。
  • text_general字段類型的聲明如下所示:

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"><!-- Configures the analysis done at the index phase --><analyzer type="index"><!-- Uses word break rules of the Unicode Text Segmentation algorith when splitting text into words. --><tokenizer class="solr.StandardTokenizerFactory"/><!-- Removes words found from stopwords.txt file. This filter is case insensitive. --><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /><!-- Transforms text to lower case --><filter class="solr.LowerCaseFilterFactory"/></analyzer><!-- Configures the analysis done at the query time --><analyzer type="query"><!-- Uses word break rules of the Unicode Text Segmentation algorith when splitting text into words. --><tokenizer class="solr.StandardTokenizerFactory"/><!-- Removes words found from stopwords.txt file. This filter is case insensitive. --><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /><!-- Applies synonyms found from the synonyms.txt file. --><filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/><!-- Transforms text to lower case --><filter class="solr.LowerCaseFilterFactory"/></analyzer> </fieldType>

    通過閱讀以下文檔,我們可以獲得有關分析階段的更多信息:

    • 分析器,令牌生成器和令牌過濾器 。

    配置文檔的字段

    我們可以通過向schema.xml文件中添加字段元素來向文檔中添加新字段。 字段元素具有許多屬性,但是在這一點上,我們需要了解以下屬性的含義:

    • name屬性指定字段的名稱。
    • 索引屬性(true / false)指定是否將字段添加到搜索索引中。 只有索引字段是可搜索和可排序的。
    • 存儲的屬性(true / false)指定是否應在搜索結果中返回該字段。
    • multiValued (true / false)指定該字段是否可以在文檔中多次出現。
    • type type屬性指定字段的類型。
    • 必填項 (是/否)指定是否需要該字段。

    為了最大程度地發揮Solr實例的性能,我們必須遵循以下準則:

    • 我們不應存儲搜索結果中不需要的字段。
    • 我們不應該為搜索功能未使用的字段建立索引。

    通過閱讀以下文檔,我們可以獲得有關最佳現場配置的更多信息:

    • 用例的字段選項
    • Solr性能因素

    現在,我們準備配置架構的實際字段。 讓我們先談談我們需要在搜索結果頁面上顯示的信息。 下面描述了此信息:

    • 我們需要待辦事項條目的ID,用于創建指向視圖待辦事項條目頁面的鏈接。
    • 我們需要待辦事項的標題,該標題用作已創建鏈接的錨文本。

    當我們知道我們的應用程序必須能夠搜索待辦事項條目的標題和描述的內容時,可以按照以下步驟將所需字段添加到我們的模式中:

  • 在架構中添加一個名為“ id”的必填字段,并將其類型設置為“ string”。 確保同時索引和存儲該字段。 將multiValued屬性的值設置為false。
  • 在模式中添加一個名為“ title”的必填字段,并將其類型添加至“ text_general”。 將該字段配置為既索引又存儲。 將多值屬性的值設置為false。
  • 添加一個名為“描述”的字段,該模式將其類型設置為“ text_general”。 配置此字段為索引但不存儲。 將multiValued屬性的值設置為false。
  • 添加一個名為“ text”的字段,并將其類型設置為“ text_general”。 配置此字段為索引但不存儲。 將其multiValue屬性的值設置為true。 該字段是存儲所有其他索引文本字段的內容的字段。
  • 添加一個名為“ _version_”的字段,并將其類型設置為“ long”。 配置此字段以進行索引和存儲。
  • 我們的字段聲明如下所示:

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="title" type="text_general" indexed="true" stored="true" required=“true” multiValued="false"/> <field name="description" type="text_general" indexed="true" stored="false" multiValued="false"/> <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> <field name="_version_" type="long" indexed="true" stored="true"/>

    配置復制字段

    我們使用復制字段將標題和描述字段的內容復制到文本字段。 我們可以使用copyField元素配置復制字段。 我們可以按照以下步驟創建所需的配置:

  • 創建一個復制字段,將“標題”字段的值復制到“文本”字段。
  • 創建一個復制字段,將“說明”字段的值復制到“文本”字段。
  • 我們的復制字段的聲明如下所示:

    <copyField source="title" dest="text"/> <copyField source="description" dest="text"/>

    配置文檔的唯一鍵字段

    唯一鍵是一個字段,該字段對于所有文檔都是唯一的。 指定文檔的唯一鍵不是強制性的,但是如果我們決定這樣做,則意味著索引不能包含在配置為唯一鍵的字段中具有相同值的兩個文檔。

    在本例中,我們將字段“ id”用作文檔的唯一鍵。 我們可以通過將以下XML添加到schema.xml文件中來進行此配置:

    <uniqueKey>id</uniqueKey>

    使用類似REST的HTTP API

    Solr提供了類似REST的HTTP API,我們可以使用它來向Solr添加信息并針對其索引執行搜索查詢。 下面將描述這兩種用例。

    注意 :本部分假定我們正在使用我的博客條目“ 運行Solr和Maven”的示例應用程序。

    向Solr添加信息

    我們可以按照以下步驟向Solr添加新信息:

  • 將POST請求發送到url'http:// localhost:8983 / solr / update / json?commit = true'。
  • 將請求的內容類型設置為“ application / json”。
  • 在請求的正文中以JSON發送添加的信息。
  • 我們的請求正文的內容如下:

    [{"id":"1","title":"Write introduction to Solr","description":"This blog entry provides an introduction to Solr search server"},{"id":"2","title":"Implement example application","description":"This application demonstrates the usage of spring-data-solr."} ]

    現在,我們使用Solr提供的類似REST的API將兩個文檔添加到Solr索引中。

    但是,很高興知道還有其他選項可以用來向Solr索引添加信息。 以下文檔中介紹了這些選項:

    • POST JSON文檔
    • 從數據庫導入記錄
    • 從CSV文件加載數據
    • 索引二進制文件
    • 使用SolrJ

    從Solr索引中搜索信息

    現在,我們準備搜索存儲在Solr實例索引中的信息。 我們可以按照以下準則對Solr索引執行搜索查詢:

    • 通過將GET請求發送到url'http:// localhost:8983 / solr / todo / select'來執行搜索查詢。
    • 查詢字符串必須設置為q request參數的值。
    • 查詢結果的格式必須設置為wt request參數的值。

    讓我們繼續前進,找出如何列出從索引中找到的所有文檔,并對索引數據執行簡單的搜索查詢。

    查找索引的所有文檔

    我們可以按照以下步驟列出所有JSON格式的文檔:

  • 將GET請求發送到網址“ http:// localhost:8983 / solr / todo / select”。
  • 將q請求參數的值設置為'*。*'
  • 將wt request參數的值設置為'json'。
  • 當我們將GET請求發送到url'http:// localhost:8983 / solr / todo / select?q = *%3A *&wt = json'時,我們應該收到以下JSON:

    {"responseHeader": {"status":0,"QTime":1,"params":{"wt":"json","q":"*:*"}},"response":{"numFound":2,"start":0,"docs":[{"id":"1","title":"Write introduction to Solr","_version_":1425949176574771200},{"id":"2","title":"Implement example application","_version_":1425949176662851584}]} }

    從索引中搜索信息

    我們可以按照以下步驟搜索標題或描述中包含“申請”一詞的所有文檔:

  • 將GET請求發送到網址“ http:// localhost:8983 / solr / todo / select”。
  • 將q請求參數的值設置為'application'
  • 將wt request參數的值設置為'json'。
  • 當我們發送GET請求到URL'http:// localhost:8983 / solr / todo / select?q = application&wt = json'時,我們應該收到以下JSON:

    {"responseHeader":{"status":0,"QTime":7,"params":{"wt":"json","q":"application"}},"response":{"numFound":1,"start":0,"docs":[{"id":"2","title":"Implement example application","_version_":1425949176662851584}]} }

    結束

    現在,我們已經獲得了理解Spring Data Solr教程的下一部分中描述的概念所需的信息。 這篇博客文章教會了我們三件事:

    • 我們了解Solr數據模型的基礎。
    • 我們知道如何配置Solr實例的架構。
    • 我們知道如何使用Solr的HTTP API將文檔添加到Solr索引并從中搜索信息。

    參考: Spring Data Solr教程:我們的JCG合作伙伴 Petri Kainulainen在Petri Kainulainen博客上對Solr的介紹 。

    翻譯自: https://www.javacodegeeks.com/2013/05/spring-data-solr-tutorial-introduction-to-solr.html

    總結

    以上是生活随笔為你收集整理的Spring Data Solr教程:Solr简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。