Более поздние дополнения:
Зачем использовать Solr Service, зачем использовать Luncence?
Вопрос: когда мы посещаем веб -сайт покупок, мы можем ввести ключевые слова на основе контента, который мы хотим, чтобы запросить соответствующий контент. Как мы можем это сделать? Эти случайные данные не могут быть запрошены на основе полей базы данных. Как они запрашиваются? Почему могут запрашивать все виды странных ключевых слов?
Ответ-реализация полнотекстового инструмента поиска, а Luncence использует сопоставление слов и сегментацию слов. For example: Beijing Tiananmen Square------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- So we can search it when we search.
Существует сегмент слов, который является китайским сегментором иканалицером, который имеет мелкозернистое нарезку и интеллектуальное нарезку, то есть в соответствии с определенным интеллектуальным алгоритмом.
Это самое большое преимущество использования Solr: реализация функции поиска.
Шаги для использования;
(1) SOLR Server создан, потому что SOLR разрабатывается с использованием Java5, поэтому JDK и Tomcat необходимы. Построить и развернуть
(2) После завершения строительства нам нужно представить поля, которые будут отображаться в библиотеку Solr. Настройка Spring и Solr, чтобы запустить Solr, когда проект запускается
(3) Импортировать содержание запроса в базе данных в библиотеку индекса Solr, которая реализована клиентом SolrJ. Для конкретного использования, пожалуйста, обратитесь к API
(4) Установить поисковую службу для клиентов. Вызовите Solr, чтобы запросить контент, существует реализация функции пейджинга. Реализация Solr выделения.
(5) Клиент получает параметры запроса страницы, вызывает службу поиска и проводит поиск.
Критерии суждения бизнеса:
1. Требуется ли поиск в этом поле. Например: название продукта, точка продажи продукта, описание продукта
(Они эквивалентны предоставлению метки Solr. После импорта данных продукта Solr делит конкретное содержание соответствующих продуктов в этих полях, а затем мы можем искать соответствующий контент)
2. Требуется ли это поле для последующего бизнеса. Например: идентификатор продукта.
Требуемые поля:
1. Идентификатор продукта
2. Название продукта
3. ПРОДОВЛЕНИЯ
4. Цена
5. Фотографии продукта
6. Название категории продукта
7. Описание продукта
Бизнес -поля в Solr:
1. ID-》 Идентификатор продукта
Другие соответствующие поля создают поля Solr.
<field name = "item_title" type = "text_ik" indexed = "true" stored = "true"/> <field name = "item_sell_point" type = "text_ik" indexed = "true" storded = "true"/> <field name = "item_price" type = "long" indexed = "strored =" strored "stepord"/"/"/"/"/"/"/"/"/"/"/"/'"/"/"/". type = "string" indexed = "false" stored = "true" /> <field name = "item_category_name" type = "string" indexed = "true" stored = "true" /> <field name = "item_desc" type = "text_ik" indexed = "true" storted = "false" /> <field = item_key name "item_key" type_ik "stored" /> <field = "item_key_key" = "text_ik" /> <field = "item_key_key". multiValued="true"/><copyField source="item_title" dest="item_keywords"/><copyField source="item_sell_point" dest="item_keywords"/><copyField source="item_category_name" dest="item_keywords"/><copyField source="item_desc" dest="item_keywords"/><copyField source="item_desc" dest = "item_keywords"/> <copyfield source = "item_desc" dest = "item_keywords"/>
Перезапустите Tomcat
SOLR является главным проектом с открытым исходным кодом в Apache, разработанном в Java, и является полнотекстовым поисковым сервером на основе Lucene. Solr предоставляет более богатый язык запросов, чем Lucene, и в то же время он настраивается и расширяется, и оптимизирует индекс и производительность поиска.
SOLR является полнотекстовым сервером поиска и может реализовать полнотекстовый службу поиска только путем его настройки. Эффективно уменьшить давление на базу данных из -за частого доступа к базе данных.
Шаг 1: развернуть Solr в системе Linux.
Шаг 2: SolrJ является клиентом Solr, и использование его требует полагаться на пакет JAR SolrJ.
Шаг 3: Добавьте содержимое базы данных в библиотеку индексов Solr, чтобы запрос был запросил в библиотеке индексов, а не в базе данных.
Уровень контроллера:
@Controller @requestMapping ("/Manager") открытый класс ItemController {@Autowired Private Itemerservice Itemservice; @Requestmapping ("/immothrall") @Responsebody public taotaoresult immormalaltem () {taotaoresult result = isemervice.importallitem (); результат возврата; }}> пакет com.taotao.search.mapper; импортировать java.util.list; Импорт com.taotao.search.pojo.item; public interface itempper {list <tem> 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.org/dtd/mybatis-3-mapper.dtd " namespace = "com.taotao.search.mapper.itemmapper"> <select id = "getItemlist" outdetype = "com.taotao.search.pojo.item"> select a.id, a.title, a.sell_point, a.price, a.image, b. Name Category_name из TB_ITEM A LEFT JOIN TB_ITEM_CAT B ON A.CID = B.ID </select> </mapper>
Шаг 4: Напишите логику запроса из Индексной библиотеки:
// Получить информацию о продукте из индексной библиотеки. Теперь этот уровень DAO должен получить информацию из библиотеки индексов, потому что предыдущая логика написания состояла в том, чтобы импортировать данные в DB в библиотеку индекса. Все последующие запросы проводятся из библиотеки индексов, а не из базы данных @RepositoryPublic Class SearchDaoImpl реализует SearchDao {@Autowired Private Solrserver Solrserver; @Override public searchResult search (solrquery Query) выбрасывает исключение {// Это напрямую выполнить запрос из библиотеки индекса QueryResponse response = solrserver.query (Query); // Получить результат запроса solrdocumentlist documentlist = response.getResults (); SearchResult result = new SearchResult (); // это должно получить общее количество записей result.setRecordCount (documentList.getNumFound ()); Список <пункт> itemList = new ArrayList <> (); // выделение продукта заключается в том, что когда мышь перемещается к слову, шрифт меняет цвет. Это карта <string, map <string, list <string >>> highting = response.gethighlighting (); Для (SolrDocument solrDocument: DocumentList) {// Каждый SolrDocument - это содержание продукта POJO, поэтому нам нужно создать объект POJO для продукта, чтобы получить подробный элемент поля = новый элемент (); item.setid ((string) solrdocument.get ("id")); // выделение - это список заголовков <string> list = highting.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 = {условия запроса} & page = {page} & row = {row}
Возвращенный результат: список продуктов Taotaoresult.
Создайте POJO, соответствующий заявлению SQL, и создайте POJO отдельно
Список содержания, используемого для установки:
Публичный класс item {private String Id; Приватная строка название; частная строка Sell_point; частная длинная цена; Приватное струнное изображение; Private String Category_Name; частная строка item_des; }Уровень контроллера:
@ControllerPublic Class SearchController {@Autowired Private SearchService SearchService; @RequestMapping (value = "/Query", method = requestMethod.get) @Responsebody public taotaoresult search (@RequestParam ("q") строка QueryString, @RequestParam (defaultValue = "1") Integer Page, @RequestParam (defaultValue = "60") integ (StringUtils.isblank (queryString)) {return taotaoresult.build (400, «Условие запроса не может быть пустым»); } Searchresult searchresult = null; try {queryString = new String (queryString.getBytes ("iso8859-1"), "UTF-8"); searchresult = searchservice.search (querystring, page, rows); } catch (Exception e) {e.printstackTrace (); return taotaoresult.build (500, ExceptionUtil.getStackTrace (e)); } return taotaoresult.ok (searchresult); }} <br> <br> <br> 1 <span style = "font-size: 16px"> Service Layer: используйте SolrQurery SolrJ для запроса: </span>Обязательным условием состоит в том, чтобы написать, как читать данные из библиотеки индекса:
Ниже приведено интерфейс -слой сервиса:
контроллер:
@ControllerPublic Class SearchController {@Autowired Private SearchService SearchService; @RequestMapping (value = "/Query", method = requestMethod.get) @Responsebody public taotaoresult search (@RequestParam ("q") строка QueryString, @RequestParam (defaultValue = "1") Integer Page, @RequestParam (defaultValue = "60") integ (StringUtils.isblank (queryString)) {return taotaoresult.build (400, «Условие запроса не может быть пустым»); } Searchresult searchresult = null; try {queryString = new String (queryString.getBytes ("iso8859-1"), "UTF-8"); searchresult = searchservice.search (querystring, page, rows); } catch (Exception e) {e.printstackTrace (); return taotaoresult.build (500, ExceptionUtil.getStackTrace (e)); } return 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.set ("df", "item_keywords"); // установить выделение Query.sethighlight (true); Query.addhighlightfield ("item_title"); Query.sethighlightsimplepre ("<em style =/" color: red/">"); query.sethighlightsimplepost ("</em>"); // Выполнить запрос searchresult searchresult = searchdao.search (Query); // Рассчитайте, сколько страниц продукта давно основано на результатах recordcount = searchresult.getRecordCount (); long pagecount = recordcount/rows; if (recordcount % rows> 0) {pagecount ++; } searchresult.setPageCount (pagecount); SearchResult.setCurpage ((Long) Page); вернуть SearchResult; }}Клиент реализует функцию поиска, введя продукты:
Уровень контроллера:
@Controller
открытый класс SearchController {@Autowired Private SearchService SearchService; @Requestmapping ("/search") public String Search (@RequestParam ("Q") строка QueryString, @RequestParam (defaultValue = "1") Integer Page, модель модели) {if (QueryString! } catch (unsupportEncodingexception e) {e.printstacktrace (); }} Searchresult searchresult = searchservice.search (QueryString, page); // Переход параметров model.addattribute ("Query", QueryString); //Model.addattribute("totalpages ", searchresult.getPageCount ()); model.addattribute ("itemlist", searchresult.getitemlist ()); model.addattribute ("page", page); вернуть "поиск"; }}Служба уровня:
@Servicepublic class searchserviceimpl реализует searchservice {@value ("$ {search_base_url}") частная строка search_base_url; @Override Public SearchResult Search (String QueryString, int Page) {// Что здесь необходимо, так это параметр Connection +. Количество записей, отображаемых на каждой странице, может быть передано или нет // вызовать службу Taotao-Search // Карта параметров запроса <String, String> param = new Hashmap <> (); param.put ("Q", QueryString); param.put ("page", page + ""); try {// вызов сервисной строки json = httpclientutil.doget (search_base_url, param); // конвертировать строку в Java Object Taotaoresult taotaoresult = taotaoresult.formattopojo (json, searchresult.class); Searchresult result = (searchresult) taotaoresult.getData (); результат возврата; /* if (taotaoresult.getStatus () == 200) {}*/} catch (Exception e) {e.printstackTrace (); вернуть ноль; }}}Приведенная выше статья с использованием Solr для реализации функции поиска продукта (пример объяснения) - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.