検索サービスは、033マイクロ02 ----基本的な検索機能を構築します

1. ページ解析

(1)ページジャンプ

ホーム・ページの上部には、入力ボックスがあります:

 

我々は任意のテキストを入力すると、検索をクリックして、それは検索ページにジャンプしますsearch.htmlの。

そして、パラメータが引き継が検索キーを要求します:

 

私たちは、オープンsearch.html下Vueの例では、事前にそこに定義されます:

< スクリプトタイプ= "テキスト/ JavaScriptを" > 
    VAR Vueの新しい新しいVM =({ 
        EL: "#searchApp"、
        データ:{ 
        }、
        コンポーネント:{ 
            //トップローディングアセンブリ
            lyTop:()=>インポート( 」./ JS /pages/top.js「)
        } 
    }); 
</ スクリプト>

VUEは、この例では、別のJSをロード、インポートを導入することにより:部分的なコンポーネントとしてtop.js。トップは、実際にページナビゲーションコンポーネントの上で、私たちは関係ありません

(2)非同期要求

ページがロードされた後に、それは検索結果を表示することです。私たちは、ページのロード時にアドレスバーのリクエストパラメータへのアクセスを必要があり、非同期要求、クエリのバックエンドデータを開始した後、ページをレンダリングします。

私たちは、記録パラメータ要求をデータオブジェクトを定義します。

データ:{ 
検索:{
キー: ""、//キーワード検索ページ
}、
goodsList:[]
}、

私たちは、ページのロードパラメータ取得要求に、作成され、記録された機能をフック。

作成(){ 
    //リクエストパラメータが存在するか否かを判断する
    IF(location.search!){ 
        リターン; 
    } 
    //ターゲットパラメータに要求
    = ly.parse検索(location.search.substring(1))のconst; 
    //レコード検索対象のデータで
    、this.search =検索
    
    の検索条件に従って、//開始要求
    ; this.loadData()
}

ブラウザでのテスト:

その後、要求、検索データを開始します。

  • ここでは、使用してly定義されたオブジェクトcommon.jsツールを。

  • 本明細書で使用される複数のパラメータを運ぶことができるPOSTリクエストは、であり、JSONにフォーマットを送信します

CORSの設定クラスでleyouゲートウェイでは、信頼できる名前を許可する追加します。

そして、ゲートウェイマッピングleyouゲートウェイプロジェクトApplication.ymlを追加します。

 

テスト:

2. 背景には、検索インターフェイスを提供します

(1)コントローラ

 

まず、いくつかの質問:

 

  • 要求モード:ポスト

  • 要求パス:/検索/ページが、フロント/検索は、ページングクエリに代わって、ゲートウェイへのパス、したがって真のパスがマップされたページをマップする必要があります

  • リクエストパラメータ:JSON形式は、1つの属性だけがあります:キー - キーワード検索が、検索結果ページには、クエリでページングしなければならないので、将来は確かにページのプロパティとなりますので、私たちは、要求されたデータを受信するためにJSONオブジェクトを使用することができます。

SearchRequest.java

パッケージlucky.leyou.domain; 

パブリック クラスSearchRequest {
     プライベートキー文字列; // 検索条件

    プライベート整数ページ; // このページ

    プライベート 静的な 最終的な整数= 20はDEFAULT_SIZEであり; // ページから受信しないページサイズが、固定サイズ
    プライベート 静的な 最終的な整数、DEFAULT_PAGE、= 1; // デフォルトページ

    のパブリック文字列のgetKey(){
         返すキー; 
    } 

    公共 ボイドSETKEY(文字列キー){
         この .KEY = キー; 
    } 

    パブリックGETPAGE整数(){
         IF(ページ== nullの){
             リターン、DEFAULT_PAGE ,; 
        } 
        //はより小さくないページを、取得、いくつかのチェックを行います1。
        リターンMath.max(、DEFAULT_PAGE ,,ページ); 
    } 

    パブリック 無効setPageで(ページ整数){
         この = .PAGE ページ; 
    } 

    公共の整数のgetSize(){
         リターンDEFAULT_SIZEの; 
    } 
}

リターン結果:ページングの結果、一般的に二つの性質:現在のページのデータの前に定義され、情報の総数が、我々はPageResultクラスを使用することができます

 

SearchController.java

 

パッケージlucky.leyou.controller。

輸入lucky.leyou.common.domain.PageResult。
輸入lucky.leyou.domain.Goods。
輸入lucky.leyou.domain.SearchRequest;
輸入lucky.leyou.service.SearchService。
輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.http.HttpStatus。
輸入org.springframework.http.ResponseEntity。
輸入org.springframework.stereotype.Controller。
輸入org.springframework.web.bind.annotation.PostMapping。
輸入org.springframework.web.bind.annotation.RequestBody。
インポートorg.springframework.web.bind.annotation.RequestMapping; 

@Controller 
@RequestMapping 
パブリック クラスSearchController { 

    @Autowired 
    プライベートSearchService searchServiceを。

    / ** 
     *搜索商品
     * 
     * @paramの要求
     * @return 
     * / 
    @PostMapping( "ページ" 公共 ResponseEntity <PageResult <製品>> 検索(@RequestBody SearchRequestリクエスト){ 
        PageResult <グッズ>結果= この.searchService.search (要求);
        もし(結果== nullを){
             戻り 新しい > <ResponseEntityを(HttpStatus.NOT_FOUND)。
        } 
        戻りResponseEntity.ok(結果)。
    } 
}

 

(2)サービス

@Autowired
 プライベートGoodsRepository goodsRepository; 

公共 PageResult <グッズ> 検索(SearchRequestリクエスト){ 
        文字列のキー = request.getKey();
         // は直接リターンヌルが存在しない場合は、検索条件があるかどうかを判断します。許可されたすべての製品検索
        IF (StringUtils.isBlank(キー)){
             リターン ヌルを; 
        } 

        // カスタムクエリビルダコンストラクトクエリ 
        NativeSearchQueryBuilder QueryBuilder = 新新NativeSearchQueryBuilder(); 

        // 1、フルテキスト検索キーのためのクエリ。 
        queryBuilder。 withQuery(QueryBuilders.matchQuery( "すべて" 、キー).operator(Operator.AND)); 

        //2、sourceFilterによって提供される結果は、フィールドが返され、我々は唯一のID、SKUは、字幕必要 
        queryBuilder.withSourceFilter(新しい新しいFetchSourceFilter(
                 新しい新しい文字列[] { "ID"、 "のSKU"、 "サブタイトル"}、ヌル;))

        // 3。 、ページング
         // 準備ページング・パラメータは、
        int型ページ= request.getPage();
         int型のサイズ= request.getSize(); 
        queryBuilder.withPageable(PageRequest.of(ページ - 1 、サイズ)); 

        // 4、クエリは、結果を取得 
        ページ<グッズ> = PageInfo この.goodsRepository.search(queryBuilder.build()); 

        // パッケージと結果が返されます
        戻る 新しい新しい PageResultを<>(pageInfo.getTotalElements()、pageInfo.getTotalPages()、pageInfo.getContent())。
    }

我々はSourceFilterを設定したい、返される結果を選択し、無駄なデータのそれ以外の束、クエリの効率に影響を与える:ポイントに注意してください。

(3)テスト

検索サービスのミクロを再起動し、ページのテストを更新します。

結果への応答をコピーします。

 

 

おすすめ

転載: www.cnblogs.com/luckyplj/p/11604555.html