中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot整合solr的方法詳解

發布時間:2020-08-20 10:20:17 來源:腳本之家 閱讀:182 作者:Leon_W 欄目:編程語言

這一篇寫一下springboot整合solr,代碼已經上傳到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"/>

配置完畢后啟動solr。

2、相關配置

配置maven

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

配置application.properties相關solr的內容

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

如果想同時使用好幾個core,通過HttpSolrClient solrClient = new HttpSolrClient(url);構造出對應core的solrClient進行相關操作。

3、solr增刪改查

3.1、新增實體

@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;
  }
}

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

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,根據主鍵是否存在來判斷是新增還是修改,刪除可以通過主鍵或者條件進行刪除。增刪改之后一定要記得commit!

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

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

springboot整合solr的方法詳解

3.3查詢

查詢則通過SolrQuery入參進行查詢

@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;

同時我寫了一個jsp頁面來展示查詢結果。

springboot整合solr的方法詳解

到此,增刪改查的基本操作都已經實現了,更多高級用法可以參考官方api文檔。

4、高亮

一開始在嘗試使用高亮時發現無法起作用,排查后發現高亮是在QueryResponse中的另一個結果集的。

QueryResponse.getHighlighting()

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

@Override
  public List<Book> query(String query) {
    List<Book> bookList = new ArrayList<Book>();
    SolrQuery solrQuery = new SolrQuery();
    //設置默認搜索的域
    solrQuery.set("df", "description");
    solrQuery.setQuery(query);
    //高亮顯示
    solrQuery.setHighlight(true);
    //設置高亮顯示的域
    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;
  }

頁面展示如下:

springboot整合solr的方法詳解

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲靖市| 成都市| 措美县| 大英县| 锡林郭勒盟| 常熟市| 南陵县| 广昌县| 登封市| 白山市| 台东市| 香格里拉县| 灵丘县| 北京市| 梧州市| 二手房| 桃园市| 五河县| 万盛区| 新绛县| 县级市| 襄垣县| 屯昌县| 广平县| 平江县| 富蕴县| 鹿泉市| 闸北区| 公主岭市| 分宜县| 浦城县| 江孜县| 库尔勒市| 昆明市| 鱼台县| 甘洛县| 汉寿县| 镶黄旗| 白水县| 来凤县| 准格尔旗|