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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring Data Solr教程:动态查询

發(fā)布時(shí)間:2023/12/3 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Data Solr教程:动态查询 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Solr通常被稱(chēng)為搜索服務(wù)器,我們可以在實(shí)現(xiàn)全文搜索功能時(shí)使用它。 但是,當(dāng)我們實(shí)現(xiàn)從搜索表單獲取其輸入的搜索功能時(shí),利用Solr的性能通常是明智的。

在這種情況下,執(zhí)行的搜索查詢(xún)?nèi)Q于收到的輸入。 這意味著查詢(xún)參數(shù)的數(shù)量取決于輸入到搜索表單的輸入。 換句話說(shuō),執(zhí)行的搜索查詢(xún)是動(dòng)態(tài)的。

我的Spring Data Solr教程的前一部分教我們?nèi)绾螌⒆远x方法添加到單個(gè)存儲(chǔ)庫(kù)。 現(xiàn)在該使用這些信息并了解如何使用Spring Data Solr創(chuàng)建動(dòng)態(tài)查詢(xún)。 讓我們開(kāi)始吧。

注意:這些博客條目提供了其他信息,可以幫助我們理解此博客文章中描述的概念:

  • 使用Maven運(yùn)行Solr
  • Spring Data Solr教程:Solr簡(jiǎn)介
  • Spring Data Solr教程:配置
  • Spring Data Solr教程CRUD(幾乎)
  • Spring Data Solr教程:將自定義方法添加到單個(gè)存儲(chǔ)庫(kù)

創(chuàng)建動(dòng)態(tài)查詢(xún)

本節(jié)描述了如何使用Spring Data Solr創(chuàng)建動(dòng)態(tài)查詢(xún)。 它分為兩個(gè)小節(jié),如下所述:

  • 第一部分描述了在開(kāi)始實(shí)際搜索功能之前需要了解的基礎(chǔ)知識(shí)。
  • 第二部分描述了如何通過(guò)向Spring Data Solr存儲(chǔ)庫(kù)添加自定義方法來(lái)實(shí)現(xiàn)示例應(yīng)用程序的搜索功能。

學(xué)習(xí)基礎(chǔ)

在開(kāi)始實(shí)現(xiàn)示例應(yīng)用程序的搜索功能之前,我們需要知道如何使用Spring Data Solr“手動(dòng)”創(chuàng)建查詢(xún)。 我們可以按照以下步驟“手動(dòng)”創(chuàng)建查詢(xún):

  • 創(chuàng)建搜索條件。
  • 創(chuàng)建查詢(xún),其中包含使用的搜索條件。
  • 執(zhí)行創(chuàng)建的查詢(xún)。
  • 下面將更詳細(xì)地描述這些步驟。

    創(chuàng)建搜索條件

    首先,我們必須為查詢(xún)創(chuàng)建搜索條件。 我們可以使用以下描述的條件類(lèi)來(lái)做到這一點(diǎn):

    • org.springframework.data.solr.core.query.SimpleStringCriteria類(lèi)是基本條件類(lèi),用于通過(guò)使用已經(jīng)格式化的查詢(xún)字符串來(lái)指定執(zhí)行的查詢(xún)。 此類(lèi)中指定的查詢(xún)字符串按原樣執(zhí)行。 因此,此類(lèi)不能用于構(gòu)建動(dòng)態(tài)查詢(xún)。
    • org.springframework.data.solr.core.query.Criteria是用于構(gòu)建動(dòng)態(tài)查詢(xún)的條件類(lèi)。 它具有流暢的API,該API支持多個(gè)Criteria對(duì)象的鏈接。

    創(chuàng)建執(zhí)行的查詢(xún)

    其次,我們必須創(chuàng)建執(zhí)行的查詢(xún)。 下面介紹Spring Data Solr的查詢(xún)類(lèi):

    • org.springframework.data.solr.core.query.SimpleQuery類(lèi)是一個(gè)支持分頁(yè)和分組的查詢(xún)類(lèi)。
    • org.springframework.data.solr.core.query.SimpleFacetQuery類(lèi)是支持多面搜索的查詢(xún)類(lèi)。
    • org.springframework.data.solr.core.query.SimpleFilterQuery類(lèi)是支持過(guò)濾器查詢(xún)的查詢(xún)類(lèi)。

    執(zhí)行創(chuàng)建的查詢(xún)

    第三,我們必須執(zhí)行創(chuàng)建的查詢(xún)。 SolrTemplate類(lèi)實(shí)現(xiàn)了一些可用于此目的的方法。 下面介紹了這些方法:

    • long count(最終SolrDataQuery查詢(xún))方法返回使用作為方法參數(shù)給出的查詢(xún)找到的文檔數(shù)。
    • UpdateResponse delete(SolrDataQuery query)方法刪除與作為方法參數(shù)給出的查詢(xún)匹配的文檔,并返回一個(gè)UpdateResponse對(duì)象。
    • T queryForObject(Query query,Class <T> clazz)方法返回與作為方法參數(shù)給出的查詢(xún)匹配的單個(gè)文檔。
    • FacetPage <T> queryForFacetPage(FacetQuery query,Class <T> clazz)方法針對(duì)Solr索引執(zhí)行構(gòu)面查詢(xún),并將查詢(xún)結(jié)果作為FacetPage對(duì)象返回。
    • Page <T> queryForPage(Query query,Class <T> clazz)方法對(duì)Solr索引執(zhí)行查詢(xún),并作為Page接口的實(shí)現(xiàn)返回查詢(xún)結(jié)果。

    讓我們繼續(xù)實(shí)踐該理論。

    實(shí)現(xiàn)搜索功能

    我們的搜索功能的要求如下:

    • 搜索功能必須返回名稱(chēng)或描述包含給定搜索詞的某些單詞的所有待辦事項(xiàng)。 換句話說(shuō),如果搜索詞是“ Foo Bar”,則我們的搜索功能必須返回標(biāo)題或描述包含“ Foo”或“ Bar”的待辦事項(xiàng)條目。
    • 搜索必須不區(qū)分大小寫(xiě)。

    因?yàn)槲覀兊乃阉鞴δ懿皇庆o態(tài)的,所以我們必須使用動(dòng)態(tài)查詢(xún)來(lái)創(chuàng)建它。 我們可以通過(guò)在Spring Data Solr存儲(chǔ)庫(kù)中添加自定義方法來(lái)使用Spring Data Solr創(chuàng)建動(dòng)態(tài)查詢(xún)。 換句話說(shuō),我們必須遵循以下步驟:

  • 創(chuàng)建一個(gè)自定義接口,該接口聲明添加的方法。
  • 實(shí)現(xiàn)創(chuàng)建的接口。
  • 修改存儲(chǔ)庫(kù)接口以擴(kuò)展創(chuàng)建的接口。
  • 下面將更詳細(xì)地描述這些步驟。

    創(chuàng)建自定義界面

    首先,我們必須創(chuàng)建一個(gè)自定義接口,該接口聲明我們的自定義搜索方法。 我們可以按照以下步驟進(jìn)行操作:

  • 創(chuàng)建一個(gè)名為CustomTodoDocumentRepository的接口。
  • 聲明search()方法。 此方法將使用的搜索詞作為方法參數(shù),并返回TodoDocument對(duì)象的列表。
  • CustomTodoDocumentRepository接口的源代碼如下所示:

    public interface CustomTodoDocumentRepository {public List<TodoDocument> search(String searchTerm);//Other methods are omitted. }

    實(shí)施創(chuàng)建的接口

    其次,我們必須實(shí)現(xiàn)我們之前創(chuàng)建的自定義接口。 我們可以按照以下步驟進(jìn)行操作:

  • 創(chuàng)建一個(gè)名為T(mén)odoDocumentRepositoryImpl的類(lèi),并實(shí)現(xiàn)CustomTodoDocumentRepository接口。
  • 用@Repository批注對(duì)類(lèi)進(jìn)行批注。
  • 將SolrTemplate字段添加到類(lèi)中,并使用@Resource注釋對(duì)其進(jìn)行注釋。
  • 實(shí)現(xiàn)search()方法。
  • search()方法的實(shí)現(xiàn)需要在此給出更詳細(xì)的描述。 我們可以通過(guò)執(zhí)行以下步驟來(lái)實(shí)現(xiàn)search()方法:

  • 獲取搜索詞的單詞。
  • 通過(guò)調(diào)用私有createSearchConditions()方法并將搜索詞的單詞作為方法參數(shù)來(lái)構(gòu)造使用的搜索條件。 此方法通過(guò)使用Criteria類(lèi)的API創(chuàng)建使用的搜索條件。
  • 通過(guò)創(chuàng)建新的SimpleQuery對(duì)象來(lái)創(chuàng)建執(zhí)行的查詢(xún),并將創(chuàng)建的Criteria對(duì)象作為構(gòu)造函數(shù)參數(shù)傳遞。
  • 通過(guò)調(diào)用SolrTemplate類(lèi)的queryForPage()方法獲取搜索結(jié)果。 將創(chuàng)建的查詢(xún)和預(yù)期結(jié)果對(duì)象的類(lèi)型作為方法參數(shù)傳遞。
  • 通過(guò)調(diào)用Page接口的getContent()方法來(lái)返回搜索結(jié)果。
  • TodoDocumentRepositoryImpl類(lèi)的源代碼如下所示:

    import org.springframework.data.domain.Page; import org.springframework.data.solr.core.SolrTemplate; import org.springframework.data.solr.core.query.Criteria; import org.springframework.data.solr.core.query.SimpleQuery; import org.springframework.stereotype.Repository;import javax.annotation.Resource;@Repository public class TodoDocumentRepositoryImpl implements CustomTodoDocumentRepository {@Resourceprivate SolrTemplate solrTemplate;@Overridepublic List<TodoDocument> search(String searchTerm) {String[] words = searchTerm.split(" ");Criteria conditions = createSearchConditions(words);SimpleQuery search = new SimpleQuery(conditions);Page results = solrTemplate.queryForPage(search, TodoDocument.class);return results.getContent();}private Criteria createSearchConditions(String[] words) {Criteria conditions = null;for (String word: words) {if (conditions == null) {conditions = new Criteria(“title”).contains(word).or(new Criteria(“description”).contains(word));}else {conditions = conditions.or(new Criteria(“title”).contains(word)).or(new Criteria(“description”).contains(word));}}return conditions;}//Other methods are omitted }

    修改存儲(chǔ)庫(kù)界面

    第三,我們必須使我們的自定義search()方法對(duì)存儲(chǔ)庫(kù)的用戶可見(jiàn)。 我們可以通過(guò)擴(kuò)展CustomTodoDocumentRepository接口來(lái)實(shí)現(xiàn)。 TodoDocumentRepository接口的源代碼如下所示:

    import org.springframework.data.solr.repository.SolrCrudRepository;public interface TodoDocumentRepository extends CustomTodoDocumentRepository, SolrCrudRepository<TodoDocument, String> {}

    現(xiàn)在,我們向Spring Data Solr存儲(chǔ)庫(kù)添加了一個(gè)自定義search()方法。 讓我們找出如何使用此方法。

    使用自定義方法

    我們可以通過(guò)修改RepositoryTodoIndexService類(lèi)的search()方法來(lái)使用自定義方法。 此方法的新實(shí)現(xiàn)非常簡(jiǎn)單。 它通過(guò)調(diào)用我們的Spring Data Solr存儲(chǔ)庫(kù)的search()方法獲取搜索結(jié)果,并返回搜索結(jié)果。

    RepositoryTodoIndexService類(lèi)的源代碼如下所示:

    import org.springframework.stereotype.Service;import javax.annotation.Resource; import java.util.List;@Service public class RepositoryTodoIndexService implements TodoIndexService {@Resourceprivate TodoDocumentRepository repository;//Other methods are omitted.@Overridepublic List<TodoDocument> search(String searchTerm) {return repository.search(searchTerm);} }

    摘要

    現(xiàn)在,我們已經(jīng)使用Spring Data Solr實(shí)現(xiàn)了動(dòng)態(tài)搜索功能。 盡管我們的搜索功能非常簡(jiǎn)單,但是我們現(xiàn)在也應(yīng)該能夠?qū)崿F(xiàn)更復(fù)雜的查詢(xún)。

    本教程教了我們兩件事:

    • 我們學(xué)習(xí)了如何使用Spring Data Solr“手動(dòng)”創(chuàng)建查詢(xún)。
    • 我們了解到,必須通過(guò)向單個(gè)存儲(chǔ)庫(kù)添加自定義方法來(lái)實(shí)現(xiàn)動(dòng)態(tài)搜索方法。

    我的Spring Data Solr教程的下一部分描述了如何對(duì)查詢(xún)結(jié)果進(jìn)行排序。

    PS此博客文章的示例應(yīng)用程序可在Github上獲得 。

    參考: Spring Data Solr教程: Petri Kainulainen博客上來(lái)自我們JCG合作伙伴 Petri Kainulainen的動(dòng)態(tài)查詢(xún) 。

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

    總結(jié)

    以上是生活随笔為你收集整理的Spring Data Solr教程:动态查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。