最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot整合solr的方法詳解

 更新時(shí)間:2019年08月19日 16:06:43   作者:Leon_W  
這篇文章主要介紹了springboot整合solr的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這一篇寫一下springboot整合solr,代碼已經(jīng)上傳到github,傳送門

1、新建core并配置schema

solr create -c "book_core" ,配置分詞器并且field類型定義為分詞器類型。

<fieldType name="ik_word" class="solr.TextField">
   <analyzer type="index">
     <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
     <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
   <analyzer type="query">
     <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
     <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
  </fieldType>

   <!-- 自定義添加filed -->
  <field name="description" type="ik_word" indexed="true" stored="true"/>

配置完畢后啟動(dòng)solr。

2、相關(guān)配置

配置maven

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>

配置application.properties相關(guān)solr的內(nèi)容

# solr配置
spring.data.solr.host=http://localhost:8983/solr/book_core

如果想同時(shí)使用好幾個(gè)core,通過HttpSolrClient solrClient = new HttpSolrClient(url);構(gòu)造出對(duì)應(yīng)core的solrClient進(jìn)行相關(guān)操作。

3、solr增刪改查

3.1、新增實(shí)體

@SolrDocument(solrCoreName = "book_core")
public class Book {

  @Id
  @Field
  private String id;

  @Field
  private String description;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }
}

在這里要說明一下 實(shí)體類上的注解@field和@SolrDocument 是為了QueryResponse.getBeans()能轉(zhuǎn)化成相關(guān)實(shí)體類,不然無法識(shí)別。

3.2增刪改

@Autowired
  SolrClient solrClient;

  @Override
  public void add(Book book) {
    SolrInputDocument document = new SolrInputDocument();
    document.setField("id",book.getId());
    document.setField("description",book.getDescription());
    try {
      solrClient.add(document);
      solrClient.commit();
    } catch (SolrServerException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  @Override
  public void delete(String query) {
    try {
      solrClient.deleteByQuery(query);
      solrClient.commit();
    } catch (SolrServerException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  @Override
  public Book update(Book book) {
    try {
      solrClient.addBean(book);
      solrClient.commit();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (SolrServerException e) {
      e.printStackTrace();
    }
    return book;
  }

增加刪除修改都差不多,增加和修改可以通過add(SolrInputDocument)和addBean,根據(jù)主鍵是否存在來判斷是新增還是修改,刪除可以通過主鍵或者條件進(jìn)行刪除。增刪改之后一定要記得commit!

主鍵是在schema中配置的,默認(rèn)有 id字段做主鍵,也可以自定義主鍵,在schema中配置。

通過add方法加了幾個(gè)demo后,可以在solr管理頁面的查詢出查看添加的內(nèi)容

3.3查詢

查詢則通過SolrQuery入?yún)⑦M(jìn)行查詢

@Override
  public List<Book> queryAll() {
    List<Book> bookList = new ArrayList<Book>();
    SolrQuery solrQuery = new SolrQuery();
    solrQuery.setQuery("*:*");
    try {
      QueryResponse queryResponse = solrClient.query(solrQuery);
      if (queryResponse != null){
        bookList = queryResponse.getBeans(Book.class);
      }
    } catch (SolrServerException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return bookList;

同時(shí)我寫了一個(gè)jsp頁面來展示查詢結(jié)果。

到此,增刪改查的基本操作都已經(jīng)實(shí)現(xiàn)了,更多高級(jí)用法可以參考官方api文檔。

4、高亮

一開始在嘗試使用高亮?xí)r發(fā)現(xiàn)無法起作用,排查后發(fā)現(xiàn)高亮是在QueryResponse中的另一個(gè)結(jié)果集的。

QueryResponse.getHighlighting()

取出來的字段值為自定義前綴后綴拼接具體字段值。

@Override
  public List<Book> query(String query) {
    List<Book> bookList = new ArrayList<Book>();
    SolrQuery solrQuery = new SolrQuery();
    //設(shè)置默認(rèn)搜索的域
    solrQuery.set("df", "description");
    solrQuery.setQuery(query);
    //高亮顯示
    solrQuery.setHighlight(true);
    //設(shè)置高亮顯示的域
    solrQuery.addHighlightField("description");
    //高亮顯示前綴
    solrQuery.setHighlightSimplePre("<font color='red'>");
    //后綴
    solrQuery.setHighlightSimplePost("</font>");
    try {
      QueryResponse queryResponse = solrClient.query(solrQuery);
      if (queryResponse == null){
        return null;
      }
      SolrDocumentList solrDocumentList = queryResponse.getResults();
      if (solrDocumentList.isEmpty()){
        return null;
      }
      //獲取高亮
      Map<String, Map<String, List<String>>> map = queryResponse.getHighlighting();
      for (SolrDocument solrDocument : solrDocumentList){
        Book book;
        List<String> list = map.get(solrDocument.get("id")).get("description");
        if (!CollectionUtils.isEmpty(list)){
          solrDocument.setField("description",list.get(0));
        }
        String bookStr = JSONUtil.toJSON(solrDocument);
        book = JSON.parseObject(bookStr,Book.class);
        bookList.add(book);
      }
    } catch (SolrServerException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return bookList;
  }

頁面展示如下:

搜索框分詞之后,搜索出來的帶有高亮的值。

增刪改查最基本的應(yīng)用就差不多了,更高級(jí)的代碼請(qǐng)查看官方api文檔。上文中所有代碼都上傳至github,傳送門

相關(guān)文章

  • 使用JSCH框架通過跳轉(zhuǎn)機(jī)訪問其他節(jié)點(diǎn)的方法

    使用JSCH框架通過跳轉(zhuǎn)機(jī)訪問其他節(jié)點(diǎn)的方法

    下面小編就為大家分享一篇使用JSCH框架通過跳轉(zhuǎn)機(jī)訪問其他節(jié)點(diǎn)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java Fork/Join框架

    Java Fork/Join框架

    Fork/Join框架是Java7中新增的一項(xiàng)特性,也是Java7平臺(tái)的其中一項(xiàng)主要改進(jìn)。下面我們就來簡(jiǎn)單探討下Java的Fork/Join框架
    2016-09-09
  • Java Math類、Random類、System類及BigDecimal類用法示例

    Java Math類、Random類、System類及BigDecimal類用法示例

    這篇文章主要介紹了Java Math類、Random類、System類及BigDecimal類用法,結(jié)合實(shí)例形式分析了java數(shù)值運(yùn)算相關(guān)的Math類、Random類、System類及BigDecimal類基本功能與使用技巧,需要的朋友可以參考下
    2019-03-03
  • Java實(shí)戰(zhàn)項(xiàng)目之斗地主和斗牛游戲的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)項(xiàng)目之斗地主和斗牛游戲的實(shí)現(xiàn)

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)斗地主和一個(gè)斗牛游戲,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • 基于Java實(shí)現(xiàn)空間濾波完整代碼

    基于Java實(shí)現(xiàn)空間濾波完整代碼

    空間濾波是一種采用濾波處理的影像增強(qiáng)方法。其理論基礎(chǔ)是空間卷積和空間相關(guān)。這篇文章主要介紹了基于Java的空間濾波代碼實(shí)現(xiàn),需要的朋友可以參考下
    2021-08-08
  • Java語言十大基礎(chǔ)特性分析

    Java語言十大基礎(chǔ)特性分析

    這篇文章介紹了Java語言十大基礎(chǔ)特性,它有哪些優(yōu)勢(shì),需要的朋友可以參考下。
    2017-08-08
  • Java中的BlockingQueue接口源碼解析

    Java中的BlockingQueue接口源碼解析

    這篇文章主要介紹了Java中的BlockingQueue接口源碼解析,BlockingQueue接口表示阻塞隊(duì)列,是Java并發(fā)包中阻塞隊(duì)列的接口定義規(guī)范,阻塞隊(duì)列意味著對(duì)于該隊(duì)列的操作是線程安全的,當(dāng)多個(gè)線程存放元素進(jìn)入隊(duì)列或者從隊(duì)列中取出元素都是線程安全的,需要的朋友可以參考下
    2023-11-11
  • Java使用Apache Commons高效處理CSV文件的操作指南

    Java使用Apache Commons高效處理CSV文件的操作指南

    在 Java 開發(fā)中,CSV(Comma-Separated Values,逗號(hào)分隔值)是一種常見的數(shù)據(jù)存儲(chǔ)格式,廣泛用于數(shù)據(jù)交換和簡(jiǎn)單的存儲(chǔ)任務(wù),本文將介紹Java使用Apache Commons高效處理CSV文件的操作指南,需要的朋友可以參考下
    2025-03-03
  • java中斷線程的正確姿勢(shì)完整示例

    java中斷線程的正確姿勢(shì)完整示例

    這篇文章主要為大家介紹了java中斷線程的正確姿勢(shì)完整示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • SpringBoot集成JWT實(shí)現(xiàn)登陸驗(yàn)證的方法詳解

    SpringBoot集成JWT實(shí)現(xiàn)登陸驗(yàn)證的方法詳解

    JSON?Web?Token(JWT)是一個(gè)開放的標(biāo)準(zhǔn)(RFC?7519),它定義了一個(gè)緊湊且自包含的方式,用于在各方之間以JSON對(duì)象安全地傳輸信息。本文將利用SpringBoot集成JWT實(shí)現(xiàn)登陸驗(yàn)證,感興趣的可以了解一下
    2022-05-05

最新評(píng)論

罗山县| 三江| 枣庄市| 桐庐县| 宜章县| 宁海县| 余姚市| 达日县| 彝良县| 余干县| 民乐县| 开阳县| 虞城县| 巢湖市| 莆田市| 资溪县| 天水市| 新邵县| 浙江省| 衢州市| 霞浦县| 广州市| 岱山县| 丹寨县| 新邵县| 新巴尔虎右旗| 手游| 皮山县| 南康市| 凉山| 拜泉县| 临夏市| 资溪县| 兴义市| 永丰县| 大方县| 元氏县| 界首市| 深州市| 会理县| 平遥县|