後で追加:
なぜSolrサービスを使用するのか、なぜLuncanceを使用するのですか?
問題は、ショッピングWebサイトにアクセスすると、関連するコンテンツを照会するコンテンツに基づいてキーワードを入力できます。どうすればこれを行うことができますか?これらのランダムデータは、データベースフィールドに基づいて照会することはできません。彼らはどのように質問されていますか?なぜあらゆる種類の奇妙なキーワードを照会できるのですか?
答えは、フルテキスト検索ツールの実装であり、Luncantはワード要素のマッチングと単語セグメンテーションを使用します。 For example: Beijing Tiananmen Square------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- So we can search it when we search.
Ikanalyzerの中国語単語セグメンターであるワードセグメントターがあります。これには、特定のインテリジェントアルゴリズムによると、微調整されたスライスとインテリジェントスライスがあります。
これは、SolRを使用することの最大の利点です。これは、検索機能の実装です。
使用の手順;
(1)SOLRサーバーはJava5を使用して開発されているため、Solrサーバーが構築されているため、JDKとTomcatが必要です。ビルドと展開
(2)建設が完了した後、SolRライブラリに表示するフィールドを導入する必要があります。プロジェクトが開始されたら、springとsolrを構成するようにsolrを開始する
(3)データベース内のクエリコンテンツをSOLRJクライアントによって実装されているSolRインデックスライブラリにインポートします。特定の使用については、APIを参照してください
(4)クライアントコールの検索サービスを確立します。 Solrを呼び出してコンテンツを照会すると、ページング機能の実装があります。 SOLRハイライトの実装。
(5)クライアントは、ページのリクエストパラメーターを受信し、検索サービスを呼び出し、検索を実行します。
ビジネスフィールド判断基準:
1.このフィールドで検索する必要があるかどうか。例:製品名、製品セールスポイント、製品の説明
(これらは、製品データをインポートした後、solrにラベルを提供することと同等です。Solrは、これらのフィールドで対応する製品の特定のコンテンツを分割し、関連するコンテンツを検索できます)
2。この分野がその後のビジネスに必要であるかどうか。例:製品ID。
必要なフィールド:
1。製品ID
2。製品タイトル
3。セールスポイント
4。価格
5。製品の写真
6。製品カテゴリ名
7。製品の説明
solrのビジネス分野:
1。ID-》製品ID
他の対応するフィールドは、solrのフィールドを作成します。
<field name = "item_title" type = "text_ik" indexed = "true" stored = "true"/> <field name = "item_sell_point" type = "text_ik" indexed = "true" stored = "true"/> <field name = "item_price" type = "long" indexed = "true" stored ""/true "" true "" true "" true "" true "" true "" star indexed = "false" stored = "true" /> <field name = "item_category_name" type = "string" indexed = "true" store " /> <field name =" item_desc "type =" text_ik "indexed =" true "strue" stored = "false" /> <field name = "item_keywords multivalued = "true"/> <copyfield source = "item_title" dest = "item_keywords"/> <copyfield source = "item_sell_point" dest = "/> <copyfield source"/> <copyfield source = "item_category_name" dest = "item_keywords"/> <copyfield source = "item_desc" dest = "item_keywords"/>
Tomcatを再起動します
Solrは、Javaで開発されたApacheの下のトップオープンソースプロジェクトであり、Luceneに基づくフルテキスト検索サーバーです。 SolrはLuceneよりも豊富なクエリ言語を提供し、同時に構成可能で拡張可能であり、インデックスと検索のパフォーマンスを最適化します。
Solrはフルテキスト検索サーバーであり、構成によってのみフルテキスト検索サービスを実現できます。データベースに頻繁にアクセスするため、データベースへの圧力を効果的に軽減します。
ステップ1:Linuxシステムにsolrを展開します。
ステップ2:SolrjはSolrのクライアントであり、それを使用するにはSolrjのJARパッケージに依存する必要があります。
ステップ3:データベースのコンテンツをSolRのインデックスライブラリに追加して、データベースではなくインデックスライブラリでクエリがクエリになるようにします。
コントローラーレイヤー:
@controller @requestmapping( "/manager")public class itemcontroller {@autowired private itemservice Itemservice; @RequestMapping( "/importall")@responsebody public taotaoresult comportallitem(){taotaoresult result = itemservice.importallitem();返品結果; }} <br>サービスレイヤーライティング:<br>マルチテーブルクエリ製品、ページに表示されるロジックライティング:<br> mapper.javaパッケージcom.taotao.search.mapper; java.util.listをインポートします。 com.taotao.search.pojo.itemをインポートします。 public interface itemmapper {list <item> getItemList(); }mappper.xml
<?xml version = "1.0" encoding = "utf-8"?> <!doctype mapper public " - // mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "com.taotao.search.mapper.itemmapper"> <select id = "getItemList" resultType = "com.taotao.search.pojo.item"> select a.id、A.Title、A.Sell_Point、A.Price、A.Image、b。 tb_itemからの名前category_name左結合tb_item_cat b on a.cid = b.id </select> </mapper>
ステップ4:インデックスライブラリからクエリのロジックを書きます:
//インデックスライブラリから製品情報を取得します。以前の記述ロジックは、DBのデータをインデックスライブラリにインポートすることであったため、このDAOレイヤーはインデックスライブラリから情報を取得することです。後続のクエリはすべて、データベース@RepositoryPublic Class SearchDaoImplを実装するデータベースからではなく、インデックスライブラリから実施されます。SearchDao{@autowired private solrserver solrserver; @Override public SearchResult Search(Solrquery Query)スロー例外{//これは、インデックスライブラリQueryResponse Response = solrserver.Query(Query)からクエリを直接実行することです。 // Query solrdocumentList documentlist = response.getResults()の結果を取得します。 searchResult result = new SearchResult(); //これは、Records result.setRecordCount(documentlist.getNumfound())を取得するためです。 list <item> itemlist = new ArrayList <>(); //製品のハイライトは、マウスが単語に移動すると、フォントが色が変わるということです。これは、Map <String、Map <String、List <String >>> Highlighting = Response.GethighLighting()です。 for(solrdocument solrdocument:documentlist){//各solrdocumentは製品pojoのコンテンツです。したがって、ここでは、製品のpojoオブジェクトを作成して、詳細なフィールドitemアイテム= new item()を取得する必要があります。 item.setId((string)solrdocument.get( "id")); //ハイライトはタイトルリスト<string> list = highlighting.get(solrdocument.get( "id"))。get( "item_title");弦; if(list!= null && list.size()> 0){title = list.get(0); } else {title =(string)solrdocument.get( "item_title"); } item.settitle(title); item.setprice((long)solrdocument.get( "item_price")); item.setImage((string)solrdocument.get( "item_image")); item.setcategory_name((string)solrdocument.get( "item_category_name")); item.setsell_point((string)solrdocument.get( "item_sell_point")); itemlist.add(item); } result.setItemlist(itemList);返品結果; }}ステップ5:インデックスライブラリのコンテンツが確立されたら、外部サービスインターフェイスの書き込みを開始します。つまり、携帯電話などの条件を通じて特定の製品を検索すると、携帯電話リスト情報の合計情報が表示されます。
リクエストURL:
/search/query?q = {query条件}&page = {page}&rows = {rows}
返された結果:Taotaoresultパッケージ製品リスト。
SQLステートメントに対応するPOJOを作成し、POJOを個別に作成します
インストールに使用される内容のリスト:
パブリッククラス項目{private string id;プライベートストリングタイトル。プライベート文字列sell_point;プライベートの長い価格;プライベート文字列画像;プライベート文字列category_name;プライベート文字列item_des; }コントローラーレイヤー:
@ControllerPublic Class SearchController {@Autowired Private SearchService SearchService; @RequestMapping(value = "/query"、method = requestmethod.get)@responsebody public taotaoresult search( @requestparam( "q")string querystring、 @requestparam( "1")integer page、 @requestparam(defaultvalue = "60")integer rows) (stringutils.isblank(querystring)){return taotaoresult.build(400、 "query条件は空にすることはできません"); } searchResult searchResult = null; try {queryString = new String(QueryString.getBytes( "ISO8859-1")、 "utf-8"); searchResult = searchService.search(QueryString、ページ、行); } catch(Exception e){e.printstacktrace(); taotaoresult.build(500、Exceptionutil.getStacktrace(e))を返します。 } taotaoresult.ok(searchResult); }} <br> <br> <br> 1 <span style = "font-size:16px">サービスレイヤー:solrjのsolrqureryを使用してクエリ:</span>前提条件は、インデックスライブラリからデータを読み取る方法を書くことです。
以下は、サービスのインターフェイスレイヤーです。
コントローラ:
@ControllerPublic Class SearchController {@Autowired Private SearchService SearchService; @RequestMapping(value = "/query"、method = requestmethod.get)@responsebody public taotaoresult search( @requestparam( "q")string querystring、 @requestparam( "1")integer page、 @requestparam(defaultvalue = "60")integer rows) (stringutils.isblank(querystring)){return taotaoresult.build(400、 "query条件は空にすることはできません"); } searchResult searchResult = null; try {queryString = new String(QueryString.getBytes( "ISO8859-1")、 "utf-8"); searchResult = searchService.search(QueryString、ページ、行); } catch(Exception e){e.printstacktrace(); taotaoresult.build(500、Exceptionutil.getStacktrace(e))を返します。 } taotaoresult.ok(searchResult); }} @ServicePublic Class SearchServiceImpl SearchService {@Autowired Private SearchDao SearchDao; @Override public SearchResult Search(String QueryString、int Page、int rows)スロー例外{solrquery query = new solrquery(); query.setquery(querystring); query.setstart((ページ1)*行); query.setrows(行); //デフォルトのクエリ検索フィールド、つまりデフォルトのクエリquery query.set( "df"、 "item_keywords"); //ハイライトquery.seethighlight(true)を設定します。 query.addhighlightfield( "item_title"); query.seethightsimplepre( "<em style =/" color:red/">"); query.seethightsimplepost( "</em>"); // Query SearchResult searchResult = searchDao.Search(Query); //結果に基づいて、製品のページが長いかを計算しますrecordcount = searchResult.getRecordCount(); long pagecount = RecordCount/rows; if(RecordCount%rows> 0){pagecount ++; } searchResult.setPageCount(PageCount); searchResult.setCurpage((long)ページ); return searchResult; }}クライアントは、製品を入力することにより、検索機能を実装します。
コントローラーレイヤー:
@コントローラ
Public Class SearchController {@Autowired Private SearchService SearchService; @RequestMapping( "/search")public string search(@RequestParam( "Q")String QueryString、@RequestParam(defaultValue = "1")integerページ、モデルモデル){if(queryString!= null){try {queryString = new String(QueryString.getS.( "iso8885-1") } catch(unsupportedencodingexception e){e.printstacktrace(); }} searchResult searchResult = searchService.search(queryString、page); // pass parameters model.addattribute( "query"、querystring); //model.addattribute( "totalpages"、searchResult.getPageCount()); Model.Addattribute( "ItemList"、seartResult.getItemlist()); Model.Addattribute( "Page"、page); 「検索」を返します。 }}サービスレイヤー:
@ServicePublic Class SearchServiceImpl SearchService {@value( "$ {search_base_url}")private string search_base_url; @Override public SearchResult Search(String QueryString、int Page){//ここで必要なのは、接続 +パラメーターです。各ページに表示されるレコードの数は渡すかどうか// taotao-searchのサービスを呼び出しますparam.put( "q"、querystring); param.put( "page"、page + ""); try {//サービス文字列json = httpclientutil.doget(search_base_url、param); //文字列をjavaオブジェクトに変換しますtaotaoresult taotaoresult = taotaoresult.formattopojo(json、seartresult.class); searchResult result =(searchResult)taotaoresult.getData();返品結果; /* if(taotaoresult.getStatus()== 200){}*/} catch(Exception E){e.printstacktrace(); nullを返します。 }}}SOLRを使用して製品検索機能を実現する上記の記事(説明の例)は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。