欢迎投稿

今日深度:

Solr,

Solr,


 

1.  Solr

1.1.  Solrj


1.1.1.  将商品数据到入到solr


 

 

2.  创建搜索系统taotao-search

2.1.  导入依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

   <modelVersion>4.0.0</modelVersion>

   <parent>

      <groupId>com.taotao.parent</groupId>

      <artifactId>taotao-parent</artifactId>

      <version>0.0.1-SNAPSHOT</version>

   </parent>

   <groupId>com.taotao.search</groupId>

   <artifactId>taotao-search</artifactId>

   <version>1.0.0-SNAPSHOT</version>

   <packaging>war</packaging>

 

   <dependencies>

      <dependency>

         <groupId>org.springframework</groupId>

         <artifactId>spring-webmvc</artifactId>

      </dependency>

      <dependency>

         <groupId>org.slf4j</groupId>

         <artifactId>slf4j-log4j12</artifactId>

      </dependency>

      <!-- Jackson Json处理工具包 -->

      <dependency>

         <groupId>com.fasterxml.jackson.core</groupId>

         <artifactId>jackson-databind</artifactId>

      </dependency>

      <!-- httpclient -->

      <dependency>

         <groupId>org.apache.httpcomponents</groupId>

         <artifactId>httpclient</artifactId>

      </dependency>

      <!-- JSP相关 -->

      <dependency>

         <groupId>jstl</groupId>

         <artifactId>jstl</artifactId>

      </dependency>

      <dependency>

         <groupId>javax.servlet</groupId>

         <artifactId>servlet-api</artifactId>

         <scope>provided</scope>

      </dependency>

      <dependency>

         <groupId>javax.servlet</groupId>

         <artifactId>jsp-api</artifactId>

         <scope>provided</scope>

      </dependency>

      <!-- Apache工具组件 -->

      <dependency>

         <groupId>org.apache.commons</groupId>

         <artifactId>commons-lang3</artifactId>

      </dependency>

      <dependency>

         <groupId>org.apache.commons</groupId>

         <artifactId>commons-io</artifactId>

      </dependency>

<dependency>

         <groupId>org.apache.solr</groupId>

         <artifactId>solr-solrj</artifactId>

         <version>4.10.2</version>

      </dependency>

   </dependencies>

 

   <build>

      <plugins>

         <!-- 配置Tomcat插件 -->

         <plugin>

            <groupId>org.apache.tomcat.maven</groupId>

            <artifactId>tomcat7-maven-plugin</artifactId>

            <configuration>

               <port>8085</port>

               <path>/</path>

            </configuration>

         </plugin>

      </plugins>

   </build>

</project>

2.2.  Web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns="http://java.sun.com/xml/ns/javaee"

   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

   id="WebApp_ID" version="2.5">

   <display-name>taotao-search</display-name>

 

   <context-param>

      <param-name>contextConfigLocation</param-name>

      <param-value>classpath:spring/applicationContext*.xml</param-value>

   </context-param>

 

   <!--SpringApplicationContext 载入 -->

   <listener>

      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

   </listener>

 

   <!-- 编码过滤器,以UTF8编码 -->

   <filter>

      <filter-name>encodingFilter</filter-name>

      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

      <init-param>

         <param-name>encoding</param-name>

         <param-value>UTF8</param-value>

      </init-param>

   </filter>

   <filter-mapping>

      <filter-name>encodingFilter</filter-name>

      <url-pattern>/*</url-pattern>

   </filter-mapping>

 

   <!-- 配置SpringMVC框架入口 -->

   <servlet>

      <servlet-name>taotao-search</servlet-name>

      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

      <init-param>

         <param-name>contextConfigLocation</param-name>

         <param-value>classpath:spring/taotao-search-servlet.xml</param-value>

      </init-param>

      <load-on-startup>1</load-on-startup>

   </servlet>

 

   <servlet-mapping>

      <servlet-name>taotao-search</servlet-name>

      <!--

         伪静态

         伪静态有利于SEO(搜索引擎优化)

       -->

      <url-pattern>*.html</url-pattern>

   </servlet-mapping>

 

   <welcome-file-list>

      <welcome-file>index.html</welcome-file>

   </welcome-file-list>

 

</web-app>

 

2.3.  SolrSpring的整合


 

2.4.  Controller

@RequestMapping(value = "search", method = RequestMethod.GET)

    public ModelAndView search(@RequestParam("q") String keyWords,

            @RequestParam(value = "page", defaultValue = "1") Integer page) {

        ModelAndView mv = new ModelAndView("search");

 

        SearchResult searchResult = null;

        try {

            searchResult = this.searchService.search(keyWordspageROWS);

        } catch (SolrServerException e) {

            e.printStackTrace();

            searchResult = new SearchResult(new ArrayList<Item>(0), 0L);

        }

 

        // 搜索关键字

        mv.addObject("query"keyWords);

 

        // 搜索结果集

        mv.addObject("itemList"searchResult.getList());

 

        // 当前页数

        mv.addObject("page"page);

 

        // 总页数

        int total = searchResult.getTotal().intValue();

        int pages = total % ROWS == 0 ? total / ROWS : total / ROWS + 1;

        mv.addObject("pages"pages);

 

        return mv;

    }

 

2.5.  Service

   public SearchResult searchItem(String keyWordsint pageint rows) {

        SolrQuery solrQuery = new SolrQuery(); // 构造搜索条件

        solrQuery.setQuery("title:" + keyWords + " AND status:1"); // 搜索关键词

        // 设置分页 start=0就是从0开始,,rows=5当前返回5条记录,第二页就是变化start这个值为5就可以了。

        solrQuery.setStart((Math.max(page, 1) - 1) * rows);

        solrQuery.setRows(rows);

 

        // 是否需要高亮

        boolean isHighlighting = !StringUtils.equals("*"keyWords) && StringUtils.isNotEmpty(keyWords);

 

        if (isHighlighting) {

            // 设置高亮

            solrQuery.setHighlight(true); // 开启高亮组件

            solrQuery.addHighlightField("title");// 高亮字段

            solrQuery.setHighlightSimplePre("<em>");// 标记,高亮关键字前缀

            solrQuery.setHighlightSimplePost("</em>");// 后缀

        }

 

        try {

            // 执行查询

            QueryResponse queryResponse = this.httpSolrServer.query(solrQuery);

            List<Item> items = queryResponse.getBeans(Item.class);

            if (isHighlighting) {

                // 将高亮的标题数据写回到数据对象中

                Map<String, Map<String, List<String>>> map = queryResponse.getHighlighting();

                for (Map.Entry<String, Map<String, List<String>>> highlighting : map.entrySet()) {

                    for (Item item : items) {

                        if (!highlighting.getKey().equals(item.getId().toString())) {

                            continue;

                        }

                        item.setTitle(StringUtils.join(highlighting.getValue().get("title"), ""));

                        break;

                    }

                }

            }

            return new SearchResult(queryResponse.getResults().getNumFound()items);

        } catch (SolrServerException e) {

            e.printStackTrace();

        }

        return null;

    }

 

 

2.6.  解决中文乱码问题


2.7.  多词搜索的逻辑关系


 


 

 

 

 


www.htsjk.Com true http://www.htsjk.com/solr/28182.html NewsArticle Solr,   1.    Solr 1.1.    Solrj 1.1.1.    将商品数据到入到 solr     2.    创建搜索系统 taotao-search 2.1.    导入依赖 project   xmlns = "http://maven.apache.org/POM/4.0.0"   xmlns:xsi = "http://www.w3.org...
相关文章
    暂无相关文章
评论暂时关闭