Springbootはelasticsearchを統合して、簡単な追加、削除、変更を実現します

前提:まず最初に、もちろんes環境が構成されています。以前のブログhttps://blog.csdn.net/weixin_39025362/article/details/105359306を参照できます。

1. springbootプロジェクトを作成し、esとlombokのmaven依存関係を導入する

<dependency>
   <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!--lombok是创建实体类通过注解@Data为实体创建get、set、toString等方法,使我们的实体类非常简洁-->
 <dependency>
   <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

2. esインデックスライブラリを作成する

1.インデックスライブラリは、postmanまたはheadプラグインを介して作成できます。作成者はes6.2.4を使用します。
次の導入では、postmanを使用してesインデックスライブラリを作成し、リクエスト、URL を書き込みます。http:// localhost:9200 / test-search
in mysql 、test-searchというデータベースを作成してから、articleというデータテーブルを作成します
。3つのフィールド、idロングタイプ、ikテキスト検索を使用したタイトルテキストタイプ、ikテキスト検索を使用したコンテンツテキストタイプ

{
  "settings": {
    "index.number_of_shards": 1,
    "index.number_of_replicas": 0,
    "index.refresh_interval": "-1"
  },
  "mappings": {
    "article": {
      "properties": {
        "id": {
          "type": "long",
          "index": false
        },
        "title": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        },
        "content": {
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word",
          "boost": 1.5
        }
      }
    }
  }
}

ここに画像の説明を挿入
インデックスライブラリが正常に作成されました
ここに画像の説明を挿入

3. springbootプロジェクトに戻り、コードの作成を開始します

1. articleというエンティティクラスを作成します

@Data
@Document(indexName = "test-search",type = "article",shards = 1,replicas = 0, refreshInterval = "-1")
public class Article implements Serializable {
    private Long id;

    private String title; //标题

    private String content;// 缩略内容
    
}

2.daoレイヤー、ElasticsearchRepositoryを継承してArticleRepositoryインターフェースを作成

public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {
    /**
     * 使用jpa的一个好处就是你想联合title和content去搜索,它就会有方法出现,使用pageable分页
     * @param title
     * @param content
     * @param pageable
     * @return
     */
    Page<Article> findByTitleLikeOrContentLike(String title, String content, Pageable pageable);

    /**
     * 根据article的content内容去搜索,使用pageable份额有
     * @param content
     * @param pageable
     * @return
     */
    Page<Article> findByContentLike(String content, Pageable pageable);
}

3.サービス層、

@Service
public class ArticleService {
    @Autowired
    private ArticleRepository articleRepository;

    public void save(Article article){
        articleRepository.save(article);
    }

    public Page<Article> search(String title, String content, Pageable pageable){
        return articleRepository.findByTitleLikeOrContentLike(title,content,pageable);
    }

    public Page<Article> search(String content,Pageable pageable){
        return articleRepository.findByContentLike(content,pageable);
    }
    public Page<Article> findAll(Pageable pageable){
        return articleRepository.findAll(pageable);
    }
}

4、コントローラー


@RestController
public class ArticleController {
    @Autowired
    private ArticleRepository articleRepository;

    @Autowired
    private ArticleService articleService;
	
	//可以插入单条也可以多条
    @RequestMapping("/articleSave")
    public String save(){
    List<Article> articles = new ArrayList<>();
    articles.add(new Article(System.currentTimeMillis(),"小米",
            "小米手机"));
    articles.add(new Article(System.currentTimeMillis(),"华为",
            "华为手机"));

    for(int i=0; i<articles.size(); i++){
        articleRepository.save(articles.get(i));
        System.out.println(articles.get(i));
    }
    return "success";
    }

    @RequestMapping("/search")
    public String search(HttpServletRequest request){
        int pageNum = 0;
        int pageSize = 10;
        String title = request.getParameter("title");
        String content = request.getParameter("content");
        Pageable pageable = PageRequest.of(pageNum,pageSize);
        Page<Article> articles = articleService.search(title,content,pageable);
        return articles.toString();
    }
}

元の記事を25件公開しました 賞賛されました4 訪問1516

おすすめ

転載: blog.csdn.net/weixin_39025362/article/details/105360676