【黑马程序员】面试题-利用solr实现商品的搜索功能
- 格式:doc
- 大小:286.00 KB
- 文档页数:12
Linux系统实战1.Linux系统有哪些部分组成?Linux内核shell 文件系统应用程序2.新建一个文本文件有有哪些命令可以实现?Touch +包名Vi + 文件名3.Linux关机与重启命令?Shutdown+时间关机Reboot 重启4.Linux切换工作目录命令?cd /5.Linux显示工作路径命令?pwd6.Linux查看目录中的文件命令?ls7.Linux显示文件和目录由根目录开始的树形结构命令?8.Linux创建目录命令?9.Linux删除文件命令?10.Linux删除目录命令?11.Linux重命名/移动命令?12.Linux复制文件命令?13.Linux创建链接命令?14.Linux文件搜索命令?15.Linux创建用户组命令?16.Linux删除用户组命令?17.Linux重命令用户组命令?18.Linux创建用户命令?19.Linux删除用户命令?20.Linux修改用户属性命令?21.Linux修改密码命令?22.Linux设置权限命令?23.Linux改变文件用户组命令?24.Linux解压缩命令有哪些?25.Linux软件包升级及安装命令?26.Linux查年文件命令有哪些?27.Linux怎样查看进程?28.Linux怎样修改环境变量?29.Linux(centos)怎样修改防火墙?30.【上机】centos在vmware中的安装31.【上机】jdk的安装与验证32.【上机】Tomcat在centos的安装与使用33.【上机】在虚拟机上安装部署web项目(ssh带有CRUD的项目),并在windows34.系统上访问。
逆向工程、分页插件35.什么是MyBatis逆向工程?有什么好处?36.逆向工程原理是什么?37.逆向工程怎样指定数据库表?38.逆向工程如何定义Java对象名称?39.如何搭建逆向工程?40.逆向工程生成的代码怎样实现crud操作?41.什么是分页插件?有什么好处?42.分页插件如何调用?43.【上机】搭建逆向工程。
【⿊马程序员】⾯试题-利⽤solr实现商品的搜索功能【⿊马程序员】⾯试题-利⽤solr实现商品的搜索功能问题提出:当我们访问购物⽹站的时候,我们可以根据我们随意所想的内容输⼊关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据不可能是根据数据库的字段查询的,那是怎么查询出来的呢,为什么千奇百怪的关键字都可以查询出来呢?答案就是全⽂检索⼯具的实现,luncence采⽤了词元匹配和切分词。
举个例⼦:北京天安门------luncence切分词:北京京天天安安门等等这些分词。
所以我们搜索的时候都可以检索到。
有⼀种分词器就是ik中⽂分词器,它有细粒度切分和智能切分,即根据某种智能算法。
这就使⽤solr的最⼤的好处:检索功能的实现。
使⽤步骤;(1)solr服务器搭建,因为solr是⽤java5开发的,所以需要jdk和tomcat。
搭建部署(2)搭建完成后,我们需要将要展⽰的字段引⼊solr的库中。
配置sring与solr结合,⼯程启动的时候启动solr(3)将数据库中的查询内容导⼊到solr索引库,这⾥使⽤的是solrj的客户端实现的。
具体使⽤可以参考api(4)建⽴搜索服务,供客户端调⽤。
调⽤solr,查询内容,这中间有分页功能的实现。
solr⾼亮显⽰的实现。
(5)客户端接收页⾯的请求参数,调⽤搜索服务,进⾏搜索。
业务字段判断标准:1、在搜索时是否需要在此字段上进⾏搜索。
例如:商品名称、商品的卖点、商品的描述(这些相当于将标签给了solr,导⼊商品数据后,solr对这些字段的对应的商品的具体内容进⾏分词切分,然后,我们就可以搜索到相关内容了)2、后续的业务是否需要⽤到此字段。
例如:商品id。
需要⽤到的字段:1、商品id2、商品title3、卖点4、价格5、商品图⽚6、商品分类名称7、商品描述Solr中的业务字段:1、id——》商品id其他的对应字段创建solr的字段。
[AppleScript] 纯⽂本查看复制代码01 02 03 04 05 06 0708 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23stored="true"/>stored="false" multiValued="true"/>重新启动tomcatSolr 是Apache下的⼀个顶级开源项⽬,采⽤Java开发,它是基于Lucene的全⽂搜索服务器。
Solr全文搜索服务1Solr介绍1.1什么是solrSolr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。
Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
使用Solr 进行创建索引和搜索索引的实现方法很简单,如下:●创建索引:客户端(可以是浏览器可以是Java程序)用POST 方法向Solr 服务器发送一个描述Field 及其内容的XML 文档,Solr服务器根据xml文档添加、删除、更新索引。
●搜索索引:客户端(可以是浏览器可以是Java程序)用GET方法向Solr 服务器发送请求,然后对Solr服务器返回Xml、json等格式的查询结果进行解析,组织页面布局。
Solr不提供构建页面UI的功能,但是Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
1.2Solr和Lucene的区别Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索应用。
Lucene仅提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索应用。
Solr的目标是打造一款企业级的搜索引擎系统,它是基于Lucene一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜索功能。
2Solr安装配置2.1下载solrSolr和lucene的版本是同步更新的,最新的版本是5.2.1本课程使用的版本:4.10.3下载地址:/dist/lucene/solr/下载版本:4.10.3Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。
seo面试题及答案SEO面试题及答案一、单选题1. SEO代表什么?A. Search Engine OptimizationB. Standard Engine OptimizationC. Social Engine OptimizationD. Secured Engine Optimization答案:A2. 在SEO中,"白帽"技术指的是什么?A. 非法的搜索引擎优化手段B. 合法的搜索引擎优化手段C. 搜索引擎优化的软件D. 搜索引擎优化的服务答案:B3. 下列哪项不是搜索引擎优化的目标?A. 提高网站在搜索引擎中的排名B. 增加网站流量C. 减少网站跳出率D. 增加网站服务器的负载答案:D4. 什么是长尾关键词?A. 与网站主题无关的关键词B. 搜索量较低但转化率较高的关键词C. 由多个词汇组成的关键词D. 只有行业专家才会搜索的关键词答案:B5. 对于SEO来说,网站加载速度为什么重要?A. 它影响用户体验B. 它影响搜索引擎排名C. 它增加了网站内容的可信度D. 以上都是答案:D二、多选题6. 下列哪些因素会影响网站的搜索引擎排名?A. 网站内容的质量B. 网站的反向链接数量C. 网站的域名年龄D. 网站的社交媒体活跃度答案:A, B, C, D7. 在进行关键词研究时,你应该考虑哪些因素?A. 关键词的搜索量B. 关键词的竞争力C. 关键词与网站内容的相关性D. 关键词的商业价值答案:A, B, C, D8. 下列哪些是提高网站SEO的合法做法?A. 使用隐藏文本B. 购买高质量的反向链接C. 优化网站内部链接结构D. 过度使用关键词填充内容答案:B, C三、简答题9. 什么是“沙盒效应”?答:沙盒效应是指新网站在开始的一段时间内排名较低,这是搜索引擎用来防止垃圾网站操纵排名的一种机制。
新网站需要一段时间来证明自己的质量和可信度,之后才能获得更好的排名。
10. 如何对一个网页进行页面优化?答:对一个网页进行页面优化包括以下几个步骤:- 确保内容质量和相关性。
Solr系列六:solr搜索详解优化查询结果(分⾯搜索、搜索结果⾼亮、查询建议、折叠展开结。
⼀、分⾯搜索1. 什么是分⾯搜索?分⾯搜索:在搜索结果的基础上进⾏按指定维度的统计,以展⽰搜索结果的另⼀⾯信息。
类似于SQL语句的group by分⾯搜索的⽰例:2. Solr中⽀持的分⾯查询字段分⾯、区间分⾯、决策树分⾯、查询分⾯2.1 字段分⾯执⾏搜索时,根据查询请求返回特定分⾯字段中找到的唯⼀值以及找到的⽂档数。
通⽤查询参数:facet:true/false 对当前搜索是否启⽤分⾯facet.query:指定⼀个额外的分⾯查询语句字段分⾯查询参数:facet.field:指定对哪个字段进⾏分⾯计算。
该参数可以多次指定以返回多个字段⽅⾯。
字段需是索引字段。
facet.sort:分⾯结果的排序⽅式:count:根据统计数量排,index:索引的词典顺序facet.limit:确定每个分⾯返回多少个唯⼀分⾯值。
可取值:整数>=-1,-1表⽰不限制,默认100。
facet.offset:对分⾯值进⾏分页,指定页偏移。
>=0 默认0。
facet.prefix:指定限制字段分⾯值必须以xxx开头,⽤以筛选分⾯值。
facet.missing:true/false,是否在分⾯字段中返回所有不包含值(值为缺失)的⽂档计数。
facet.mincount:指定分⾯结果中的分⾯值的统计数量>=mincount的才返回⽰例:sort、limit、offset、prefix、missing、mincount 可根据字段指定: f.filedname.facet.sort=count2.2 区间分⾯区间分⾯将数值或时间字段值分成⼀些区间段,按区间段进⾏统计。
区间分⾯查询参数:facet.range:指定对哪个字段计算区间分⾯。
可多次⽤该参数指定多个字段。
facet.range=price&facet.range=agefacet.range.start:起始值f.price.facet.range.start=0.0&f.age.facet.range.start=10stModified_dt.facet.range.start=NOW/DAY-30DAYSfacet.range.end:结束值f.price.facet.range.end=1000.0&f.age.facet.range.start=99stModified_dt.facet.range.end=NOW/DAY+30DAYSfacet.range.gap:间隔值,创建⼦区间。
Solr搜索引擎的设计和实现搜索引擎是当今互联网上最重要的工具之一。
对于企业和网站来说,搜索引擎不仅能够使用户更快地找到他们所需要的信息,而且还能够提高网站的可用性和搜索排名。
Solr搜索引擎是一个基于Lucene的搜索平台,可以提供快速、准确和可扩展的搜索功能。
在本文中,我们将探讨Solr搜索引擎的设计和实现。
一、Solr搜索引擎的概述Solr搜索引擎是一个开源的搜索平台,由Apache基金会开发和维护。
Solr搜索引擎的基础是Lucene搜索引擎,它在性能和可扩展性方面做出了大量的改进。
Solr搜索引擎可以满足不同的搜索需求,包括全文搜索、过滤搜索和数据聚合搜索等。
此外,Solr 搜索引擎还提供了丰富的管理界面和API,可以方便地配置和管理搜索应用程序。
二、Solr搜索引擎的架构Solr搜索引擎的架构由以下组件组成:1. HTTP服务器 - Solr搜索引擎基于HTTP协议实现,因此需要一个HTTP服务器来处理请求。
Solr搜索引擎提供了内置的Jetty服务器和外部Web服务器支持。
2. XML配置文件 - Solr搜索引擎的配置是通过XML文件实现的。
配置文件包括核心配置文件、请求处理器配置文件、查询解析器配置文件等。
3. Lucene索引库 - Solr搜索引擎建立在Lucene索引库的基础上,通过对Lucene索引库的扩展和优化,支持更加灵活的搜索和查询操作。
4. 请求处理器 - Solr搜索引擎的请求处理器负责处理用户提交的搜索请求。
Solr搜索引擎提供多个请求处理器,包括查询处理器、提交处理器、导入处理器和更新处理器等。
5. 查询解析器 - Solr搜索引擎的查询解析器是查询请求的重要组成部分,它负责将用户的查询请求解析为Lucene索引库的查询表达式。
6. 响应生成器 - Solr搜索引擎的响应生成器负责将查询结果转化为响应格式,包括XML、JSON和CSV等。
三、Solr搜索引擎的工作原理Solr搜索引擎的工作过程包括索引构建和搜索查询两个阶段。
Solr全文检索服务1企业站内搜索技术选型在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。
1.1单独使用Lucene实现单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。
1.2使用Google或Baidu接口通过第三方搜索引擎提供的接口实现站内搜索,这样和第三方引擎系统依赖紧密,不方便扩展,不建议采用。
1.3使用Solr实现基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为S olr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。
2什么是Solr什么是SolrSolr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引。
Solr搜索只需要发送 HTTP GET 请求,然后对 Solr返回Xml、json等格式的查询结果进行解析,组织页面布局。
Solr不提供构建UI 的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
Solr与Lucene的区别Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
solr简单搜索案例solr简单搜索案例使⽤Solr实现电商⽹站中商品信息搜索功能,可以根据关键字搜索商品信息,根据商品分类、价格过滤搜索结果,也可以根据价格进⾏排序,实现分页。
架构分为:1、 solr服务器2、⾃⼰的web服务器(需要开发)3、数据库mysql solr案例本案例⽤的springmvc+solr+mysql⾃⼰开发的应⽤1、 Controller获取搜索条件,并响应搜索结果到前台页⾯。
2、 Service使⽤solrj来调⽤solr的服务进⾏索引和搜索Service调⽤dao进⾏商品数据的维护时,要同步更新索引库(不实现)3、 Dao(本案例不实现)对商品数据进⾏维护和查询功能:接收service层传递过来的参数,根据参数查询索引库,返回查询结果。
参数:SolrQuery对象返回值:⼀个商品列表List<ProductModel>,还需要返回查询结果的总数量。
返回:ResultModel⽅法定义:ResultModel queryProduct(SolrQuery query) throws Exception;商品对象模型:public class ProductModel {// 商品编号private String pid;// 商品名称private String name;// 商品分类名称private String catalog_name;// 价格private float price;// 商品描述private String description;// 图⽚名称private String picture;}返回值对象模型public class ResultModel {// 商品列表private List<ProductModel> productList;// 商品总数private Long recordCount;// 总页数private int pageCount;// 当前页private int curPage;}Dao接⼝:public ResultModel productSearch(SolrQuery solrQuery) throws Exception; DaoImp:@Repositorypublic class ProductDaoimp implements ProductDao {@Autowiredprivate SolrServer solrServer;@Overridepublic ResultModel productSearch(SolrQuery solrQuery) throws Exception {// TODO Auto-generated method stubResultModel resultModel = new ResultModel();QueryResponse query = solrServer.query(solrQuery);SolrDocumentList results = query.getResults();resultModel.setRecordCount(results.getNumFound());List<ProductModel> productList = new ArrayList<>();for (SolrDocument doc : results) {ProductModel productModel = new ProductModel();String id = (String) doc.get("id");Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();String productname = "";if (highlighting != null && highlighting.size() > 0) {List<String> list2 = highlighting.get(doc.get("id")).get("product_name");if (list2 != null) {productname = list2.get(0);} else {productname = (String) doc.get("product_name");}}productModel.setPid(id);productModel.setName(productname);productModel.setCatalog_name((String) doc.get("product_catalog_name"));productModel.setPicture((String) doc.get("product_picture"));productModel.setPrice(Float.parseFloat((String.valueOf(doc.get("product_price"))))); productList.add(productModel);}resultModel.setProductList(productList);return resultModel;}Service层(接⼝及实现):接⼝:public interface ProductService {ResultModel productSearch(String queryString,String catalog_name, String price, Integer page, String sort, Model model) throws Exception; }实现:@Service@Transactionalpublic class ProductServiceimp implements ProductService {private final int PAZE_SIZE = 8;@Autowiredprivate ProductDao productDao;@Overridepublic ResultModel productSearch(String queryString, String catalog_name, String price, Integer page, String sort,Model model) throws Exception {// TODO Auto-generated method stub// 拼装查询条件SolrQuery query = new SolrQuery();query.set("df", "product_keywords");// 查询条件if (null != queryString && !"".equals(queryString)) {query.setQuery(queryString);} else {query.setQuery("*:*");}// 商品分类名称过滤if (null != catalog_name && !"".equals(catalog_name)) {query.addFilterQuery("product_catalog_name:" + catalog_name);}// 价格区间过滤if (null != price && !"".equals(price)) {String[] strings = price.split("-");query.addFilterQuery("product_price:[" + strings[0] + " TO " + strings[1] + "]");}// 排序条件if ("1".equals(sort)) {query.setSort("product_price", ORDER.desc);} else {query.setSort("product_price", ORDER.asc);}if (null == page) {page = 1;}int start = (page - 1) * PAZE_SIZE;//设置默认搜索域query.setStart(page);query.setRows(PAZE_SIZE);// ⾼亮设置query.setHighlight(true);query.addHighlightField("product_name");query.setHighlightSimplePre("<span style=\"color:red\">");query.setHighlightSimplePost("</span>");// 查询商品列表ResultModel resultModel = productDao.productSearch(query);// 计算总页数long pages = ( resultModel.getRecordCount() / PAZE_SIZE);if ( resultModel.getRecordCount() % PAZE_SIZE > 0) {pages = pages + 1;}resultModel.setPageCount(pages);resultModel.setCurPage(page);return resultModel;}}Controller层:@Controllerpublic class ProductController {@Autowiredprivate ProductService productservice;@RequestMapping("/list")public String productSearch(String queryString,String catalog_name, String price, Integer page, String sort, Model model) throws Exception { ResultModel resultModel= productservice.productSearch(queryString,catalog_name, price, page, sort, model);model.addAttribute("result", resultModel);// 参数回显model.addAttribute("queryString", queryString);model.addAttribute("caltalog_name", catalog_name);model.addAttribute("price", price);model.addAttribute("sort", sort);model.addAttribute("page", page);return "product_list";}}POJO类:public class ProductModel {// 商品编号private String pid;// 商品名称private String name;// 商品分类名称private String catalog_name;// 价格private float price;// 商品描述private String description;// 图⽚名称private String picture;public void setPid(String pid) {this.pid = pid;}public String getName() {return name;}public void setName(String name) { = name;}public String getCatalog_name() {return catalog_name;}public void setCatalog_name(String catalog_name) {this.catalog_name = catalog_name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public String getPicture() {return picture;}public void setPicture(String picture) {this.picture = picture;}}ResultModel类:public class ResultModel {// 商品列表private List<ProductModel> productList;// 商品总数private Long recordCount;// 总页数private Long pageCount;// 当前页private long curPage;public List<ProductModel> getProductList() {return productList;}public void setProductList(List<ProductModel> productList) {this.productList = productList;}public Long getRecordCount() {return recordCount;}public void setRecordCount(Long recordCount) {this.recordCount = recordCount;}public Long getPageCount() {return pageCount;}public void setPageCount(Long pageCount) {this.pageCount = pageCount;}public long getCurPage() {return curPage;}public void setCurPage(long curPage) {this.curPage = curPage;}}config:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance" xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:dubbo="/schema/dubbo" xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-4.0.xsd /schema/mvc /schema/mvc/spring-mvc-4.0.xsd/schema/dubbo /schema/dubbo/dubbo.xsd/schema/context /schema/context/spring-context-4.0.xsd"><!--注解扫描 --><context:component-scan base-package="cn.kingdee"></context:component-scan><!--注解驱动(为了提⾼运⾏速度) --><mvc:annotation-driven /><!--视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><!--路径前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp"></property></bean><!--注⼊solrServer--><bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer"><constructor-arg value="http://localhost:8080/solr"></constructor-arg></bean></beans><web-app xmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>springmvcssm</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springMvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping></web-app>jsp:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="/jsp/jstl/core"%><%@ taglib prefix="fmt" uri="/jsp/jstl/fmt" %><!DOCTYPE html><!-- saved from url=(0047)/list.html?cat=1315,1343,1355 --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta content="utf-8" http-equiv="charset"><link rel="stylesheet" type="text/css"href="<c:url value='/resource'/>/base.css" media="all"><link rel="stylesheet" type="text/css"href="<c:url value='/resource'/>/plist20131112.css" media="all"><link rel="stylesheet" type="text/css"href="<c:url value='/resource'/>/list-page-20141009.css" media="all"><link rel="stylesheet" type="text/css"href="<c:url value='/resource'/>/pop_compare.css" media="all"><link rel="shortcut icon" type="image/ico"href="/favicon.ico"><script type="text/javascript"src="<c:url value='/resource'/>/jquery-1.2.6.pack.js"></script><style id="style-1-cropbar-clipper">/* Copyright 2014 Evernote Corporation. All rights reserved. */.en-markup-crop-options {top: 18px !important;left: 50% !important;margin-left: -100px !important;width: 200px !important;border: 2px rgba(255,255,255,.38) solid !important;border-radius: 4px !important;}.en-markup-crop-options div div:first-of-type {margin-left: 0px !important;}</style><script type="text/javascript">function query() {//执⾏关键词查询时清空过滤条件document.getElementById("catalog_name").value="";document.getElementById("price").value="";document.getElementById("page").value="";//执⾏查询queryList();}function queryList() {//提交表单document.getElementById("actionForm").submit();}function filter(key, value) {document.getElementById(key).value=value;queryList();}function sort() {var s = document.getElementById("sort").value;if (s != "1") {s = "1";} else {s = "0";}document.getElementById("sort").value = s;queryList();}function changePage(p) {var curpage = Number(document.getElementById("page").value);curpage = curpage + p;document.getElementById("page").value = curpage;queryList();}</script></head><body class="root61"><div id="shortcut-2013"><div class="w"><ul class="fl lh"><li class="fore1 ld"><b></b><a href="#" rel="nofollow">收藏京东</a></li><li class="fore2 ld"><s></s><a href="#" rel="nofollow">我的订单</a></li><li class="fore2-1 ld" id="jd-vip"><i></i><i></i><s></s><a target="_blank" rel="nofollow" href="/">会员俱乐部</a></li><li class="fore2-2 ld" id="jd-dakehu"> <i></i><s></s> <a href="/" target="_blank" rel="nofollow">企业频道</a> </li><li class="fore3 ld menu" id="app-jd" data-widget="dropdown" clstag="homepage|keycount|home2013|01d"><s></s><i></i><span class="outline"></span><span class="blank"></span><a href="/" target="_blank">⼿机京东</a><b></b></li><li class="fore4 ld menu" id="biz-service" data-widget="dropdown"><s></s><span class="outline"></span><span class="blank"></span>客户服务<b></b></li><li class="fore5 ld menu" id="site-nav" data-widget="dropdown"><s></s><span class="outline"></span><span class="blank"></span>⽹站导航<b></b></li></ul><span class="clr"></span></div></div><!--shortcut end--><div id="o-header-2013"><div class="w" id="header-2013"><div id="logo-2013" class="ld"><a href="/" hidefocus="true"><b></b><img src="<c:url value='/resource'/>/logo-201305.png" width="270" height="60" alt="京东"></a></div> <!--logo end--><div id="search-2013"><div class="i-search ld"><ul id="shelper" class="hide"></ul><form id="actionForm" action="list.action" method="POST"><div class="form"><input type="text" class="text" accesskey="s" name="queryString" id="key" value="${queryString }"autocomplete="off" onkeydown="javascript:if(event.keyCode==13) {query()}"><input type="button" value="搜索" class="button" onclick="query()"></div><input type="hidden" name="catalog_name" id="catalog_name" value="${catalog_name }"/><input type="hidden" name="price" id="price" value="${price }"/><input type="hidden" name="page" id="page" value="${result.curPage }"/><input type="hidden" name="sort" id="sort" value="${sort }"/></form></div><div id="hotwords"></div></div><!--search end--><div id="my360buy-2013"><dl><dt class="ld"><s></s><a href="/">我的京东</a><b></b></dt><dd><div class="loading-style1"><b></b>加载中,请稍候...</div></dd></dl></div><!--my360buy end--><div id="settleup-2013"><dl><dt class="ld"><s></s><span class="shopping"><span id="shopping-amount">0</span></span><a href="/cart/cart.html" id="settleup-url">去购物车结算</a> <b></b> </dt> <dd><div class="prompt"><div class="loading-style1"><b></b>加载中,请稍候...</div></div></dd></dl></div><!--settleup end--></div><!--header end--><div class="w"><div id="nav-2013"><div id="categorys-2013" class="categorys-2014"><div class="mt ld"><h2><a href="/allSort.aspx">全部商品分类<b></b></a></h2></div></div><div id="treasure"></div><ul id="navitems-2013"><li class="fore1" id="nav-home"><a href="/">⾸页</a></li><li class="fore2" id="nav-fashion"><a href="/">服装城</a></li><li class="fore3" id="nav-chaoshi"><a href="/chaoshi.html">⾷品</a></li><li class="fore4" id="nav-tuan"><a href="/" target="_blank">团购</a></li><li class="fore5" id="nav-auction"><a href="/">夺宝岛</a></li><li class="fore6" id="nav-shan"><a href="/">闪购</a></li><li class="fore7" id="nav-jinrong"><a href="/" target="_blank">⾦融</a></li></ul></div></div></div><div class="w"><div class="breadcrumb"><strong><a href="#">服饰内⾐</a></strong><span> > <ahref="#">⼥装</a> > <a href="#">T恤</a></span></div></div><div class="w main"><div class="right-extra"><div id="select" clstag="thirdtype|keycount|thirdtype|select" class="m"><div class="mt"><h1>T恤 -<strong> 商品筛选</strong></h1></div><div class="mc attrs"><div data-id="100001" class="brand-attr"><div class="attr"><div class="a-key">商品类别:</div><div class="a-values"><div class="v-tabs"><div class="tabcon"><div><a href="javascript:filter('catalog_name', '时尚卫浴')">时尚卫浴</a></div><div><a href="javascript:filter('catalog_name', '另类⽂体')">另类⽂体</a></div><div><a href="javascript:filter('catalog_name', '创意相架')">创意相架</a></div><div><a href="javascript:filter('catalog_name', '巧妙收纳')">巧妙收纳</a></div><div><a href="javascript:filter('catalog_name', '与钟不同')">与钟不同</a></div><div><a href="javascript:filter('catalog_name', '个性男⼈')">个性男⼈</a></div><div><a href="javascript:filter('catalog_name', '电脑周边')">电脑周边</a></div><div><a href="javascript:filter('catalog_name', '品质家电')">品质家电</a></div><div><a href="javascript:filter('catalog_name', '品味茶杯')">品味茶杯</a></div><div><a href="javascript:filter('catalog_name', '四季⽤品')">四季⽤品</a></div><div><a href="javascript:filter('catalog_name', '健康宝宝')">健康宝宝</a></div><div><a href="javascript:filter('catalog_name', '新潮美容')">新潮美容</a></div><div><a href="javascript:filter('catalog_name', '产品配件')">产品配件</a></div><div><a href="javascript:filter('catalog_name', '雅致灯饰')">雅致灯饰</a></div><div><a href="javascript:filter('catalog_name', '阳光车饰')">阳光车饰</a></div><div><a href="javascript:filter('catalog_name', '趣味纸抽')">趣味纸抽</a></div><div><a href="javascript:filter('catalog_name', '布艺⽑绒')">布艺⽑绒</a></div><div><a href="javascript:filter('catalog_name', '益智⼿⼯')">益智⼿⼯</a></div><div><a href="javascript:filter('catalog_name', '环保餐具')">环保餐具</a></div><div><a href="javascript:filter('catalog_name', '闪亮匙扣')">闪亮匙扣</a></div><div><a href="javascript:filter('catalog_name', '⼿机饰品')">⼿机饰品</a></div><div><a href="javascript:filter('catalog_name', '精品数码')">精品数码</a></div><div><a href="javascript:filter('catalog_name', '理财钱罐')">理财钱罐</a></div><div><a href="javascript:filter('catalog_name', '美味厨房')">美味厨房</a></div><div><a href="javascript:filter('catalog_name', '保健按摩')">保健按摩</a></div><div><a href="javascript:filter('catalog_name', '魅⼒⼥⼈')">魅⼒⼥⼈</a></div></div></div></div></div></div><div data-id="100002" class="prop-attrs"><div class="attr"><div class="a-key">价格:</div><div class="a-values"><div class="v-fold"><ul class="f-list"><li><a href="javascript:filter('price','0-9')">0-9</a></li><li><a href="javascript:filter('price','10-19')">10-19</a></li><li><a href="javascript:filter('price','20-29')">20-29</a></li><li><a href="javascript:filter('price','30-39')">30-39</a></li><li><a href="javascript:filter('price','40-49')">40-49</a></li><li><a href="javascript:filter('price','50-*')">50以上</a></li></ul></div></div></div></div></div></div><div id="filter"><div class="cls"></div><div class="fore1"><dl class="order"><dt>排序:</dt><dd><a href="javascript:sort()">价格</a><b></b></dd></dl><dl class="activity"><dd></dd></dl><div class="pagin pagin-m"><span class="text"><i>${result.curPage }</i>/${result.pageCount }</span> <a href="javascript:changePage(-1)" class="prev">上⼀页<b></b></a><a href="javascript:changePage(1)" class="next">下⼀页<b></b></a></div><div class="total"><span>共<strong>${result.recordCount }</strong>个商品<span class="clr"></span></div></div><!--商品列表开始--><div id="plist" class="m plist-n7 plist-n8 prebuy"><ul class="list-h"><c:forEach var="item" items="${result.productList }"><li pid="${item.pid }"><div class="lh-wrap"><div class="p-img"><a target="_blank" href="#"><img width="220" height="282" class="err-product" src="<c:url value='/images'/>/${item.picture}"></a></div><div class="p-name"><a target="_blank" href="#">${ }</a></div><div class="p-price"><strong>¥<fmt:formatNumber value="${item.price}" maxFractionDigits="2"/></strong><span id="p1269191543"></span> </div></div></li></c:forEach></ul></div><!--商品列表结束--></div><div class="left"><div id="sortlist" clstag="thirdtype|keycount|thirdtype|sortlist"class="m"><div class="mt"><h2>服饰内⾐</h2></div><div class="mc"><div class="item current"><h3><b></b>⼥装</h3><ul><li><a href="/1315-1343-1355.html">T恤</a></li><li><a href="/1315-1343-1354.html">衬衫</a></li><li><a href="/1315-1343-1356.html">针织衫</a></li><li><a href="/1315-1343-9713.html">雪纺衫</a></li><li><a href="/1315-1343-9710.html">卫⾐</a></li><li><a href="/1315-1343-9714.html">马甲</a></li><li><a href="/1315-1343-9719.html">连⾐裙</a></li><li><a href="/1315-1343-9720.html">半⾝裙</a></li><li><a href="/1315-1343-9715.html">⽜仔裤</a></li><li><a href="/1315-1343-9717.html">休闲裤</a></li><li><a href="/1315-1343-9716.html">打底裤</a></li><li><a href="/1315-1343-9718.html">正装裤</a></li><li><a href="/1315-1343-9711.html">⼩西装</a></li><li><a href="/1315-1343-9712.html">短外套</a></li><li><a href="/1315-1343-9708.html">风⾐</a></li><li><a href="/1315-1343-9706.html">⽑呢⼤⾐</a></li><li><a href="/1315-1343-9707.html">真⽪⽪⾐</a></li><li><a href="/1315-1343-9705.html">棉服</a></li><li><a href="/1315-1343-3983.html">⽻绒服</a></li><li><a href="/1315-1343-9722.html">⼤码⼥装</a></li><li><a href="/1315-1343-9721.html">中⽼年⼥装</a></li><li><a href="/1315-1343-9723.html">婚纱</a></li><li><a href="/1315-1343-11985.html">打底衫</a></li><li><a href="/1315-1343-11986.html">旗袍/唐装</a></li><li><a href="/1315-1343-11987.html">加绒裤</a></li><li><a href="/1315-1343-11988.html">吊带/背⼼</a></li><li><a href="/1315-1343-11989.html">⽺绒衫</a></li><li><a href="/1315-1343-11991.html">短裤</a></li><li><a href="/1315-1343-11993.html">⽪草</a></li><li><a href="/1315-1343-11996.html">礼服</a></li><li><a href="/1315-1343-11998.html">仿⽪⽪⾐</a></li><li><a href="/1315-1343-11999.html">⽺⽑衫</a></li><li><a href="/1315-1343-12000.html">设计师/潮牌</a></li></ul></div><div class="item"><h3><b></b>男装</h3></div><div class="item"><h3><b></b>内⾐</h3></div><div class="item"><h3><b></b>服饰配件</h3></div></div></div><div id="limitBuy"><div id="limitbuy9199"clstag="thirdtype|keycount|thirdtype|limitbuy536"class="m limitbuy hide"><div class="mt"><h2>服饰鞋帽</h2></div><div class="mc"><div id="clock9199" class="clock">正在加载…</div><div id="limit9199"></div></div></div></div><div id="ad_left" reco_id="6" class="m m0 hide"></div><!--⽤户最终购买--><div id="finalbuy" class="hide m m0" style="display: block;"><div class="mt"><h2>浏览<font color="red">T恤</font>最终购买</h2></div><div class="mc"></div></div><div id="weekRank" clstag="thirdtype|keycount|thirdtype|mrank"class="m rank"><div class="mt"><h2>⼀周销量排⾏</h2></div><div class="mc">。
百度面试题(All)一、选择题:15分共10题1. 已知一个线性表(38,25,74,63,52,48),采用的散列函数为Hash($Key)=$Key mod 7,将元素散列到表长为7的哈希表中存储。
请选择后面两种冲突解决方法分别应用在该散列表上进行等概率成功查找的平均查找长度,拉链法,线性探测法.A. 1.0B. 1.5C. 1.7D. 2.0E. 2.3F. 7/6G. 4/3H. 3/22. 需要将OS缓冲区的数据刷新到硬盘,可以调用的函数有(多选):A.fflush()B. fsync()C. sync()D.writev()3. 下面哪个shell语句不能打印出用户主目录的路径?A. echo “$HOME”B. echo ~C. echo `$HOME`D. echo $HOME4. 最坏情况下,合并两个大小为n的已排序数组所需要的比较次数A.2nB.2n-1C.2n+1D.2n-25. 一个B类网的子网掩码是255.255.240.0,这个子网能拥有的最大主机数是:A. 240B. 255C.4094D. 655346. 以下代码执行后,val的值是___:unsigned long val = 0;char a = 0x48;char b = 0x52;val = b << 8 | a;A 20992B 21064C 72D 07. 内存的速度远远高于磁盘速度,所以为了解决这个矛盾,可以采用:A 并行技术B 虚存技术C 缓冲技术D 通道技术8. 以下代码打印的结果是(假设运行在i386系列计算机上):struct st_t{int status;short* pdata;char errstr[32];};st_t st[16];char* p = (char*)(st[2].errstr + 32);printf("%d", (p - (char*)(st)));A 32B 114C 120D 11129. 同一进程下的线程可以共享以下A. stackB. data sectionC. register setD. thread ID10. 以下哪种操作最适合先进行排序处理?A 找最大、最小值B 计算算术平均值C 找中间值D 找出现次数最多的值二、简答题:20分,共2题1. (6分)下面是一个http请求:GET /baidu/blog/item/6605d1b4eb6433738ad4b26d.html HTTP/1.1Host: /doc/5415270712.html,User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6Accept:text/xml,application/xml,application/xhtml+xml,text/html;q =0.9,text/plain;q=0.8,image/png,*/*;q =0.5Accept-Language: zh-cn,zh;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: gb2312,utf-8;q=0.7,*;q=0.7Keep-Alive: 300Connection: keep-aliveReferer: /doc/5415270712.html,/baiduCookie: BAIDUID=AFB70E986AC48B336ABAB7505CDD1C76;请解释以下各字段基本含义:Host、User-Agent、Accept-Charset、Connection、Referer、Cookie2. (14分)函数A将字符串str1转成小写,并打印出转化前后的字符串。
Solr的应用场景分析Solr是一个基于Java的搜索引擎,被广泛应用于Web搜索、文档管理、电商等各种应用场景。
本文将从Solr的特性入手,探讨其主要应用场景及其优势。
一、高效搜索引擎Solr的核心特性是高效搜索引擎,它能够处理大量的数据,并且具有快速的搜索速度。
因此,Solr适用于大型网站、Web应用程序以及企业级应用程序等各种情况下的搜索引擎。
1、电子商务在电子商务行业,Solr可以帮助电商网站提供快速、精准的搜索体验,减少用户的等待时间,促进转化率。
Solr具有高效的搜索速度以及高质量的搜索结果,可以根据用户的搜索需求,实现智能联想、拼写检查等搜索辅助功能,提高用户体验。
另外,Solr还支持基于地理位置的搜索,比如可以按照用户所在地域,展示用户附近的产品信息,大大提升用户的便利性。
2、企业应用程序在企业应用程序中,Solr也经常被用作搜索引擎,能够搜索企业内存储的各种数据,例如产品信息、客户、工程文件等。
Solr提供了高度灵活的搜索体验,用户可以通过各种搜索参数,实现快速、准确地检索所需的数据。
二、文档管理系统Solr不仅仅是一个搜索引擎,同时也是一个强大的文档管理系统,支持各种数据格式的索引和搜索。
因此,Solr可以被广泛应用于文档管理系统,帮助用户快速准确的检索所需文件。
1、数字资料库Solr可以作为数字资料库的一部分,能够实现全文检索和查询,而不仅仅是简单的关键字检索。
数字资料库包括了各种类型的文件,例如PDF文件、Microsoft Office文件、HTML文件等,Solr可以基于这些文件的内容建立索引,并实现快速准确的搜索功能。
2、知识管理系统Solr可以作为一个知识管理系统的组件,帮助企业组织内部的知识库。
当员工需要查询某种信息时,Solr可以搜索企业内多种数据源的内容,并返回相关的结果。
此外,Solr还具有自动标记、选取等功能,能够帮助企业快速实现知识共享,提高工作效率。
Solr4:查询参数fq的⽤法(对结果进⾏过滤;两组关键词组合查询)Solr查询参数⽂档可以参考:这⾥主要说⼀下fq参数的使⽤。
1. 需求⼀搜索商户信息时,已经可以按指定关键词搜索;但有时需要缩⼩范围,⽐如在江苏省范围搜索,或者是苏州市范围内搜索。
注意:不是指记录包含“江苏省”、"苏州市“关键词的,⽽是此记录的⾏政区域属性值是属于”江苏省“或者是”苏州市"的。
2. 实现⼀1). schema.xml定义如下:<field name="detail_id" type="string" indexed="true" stored="true" required="true" multiValued="false"/><field name="category_id" type="int" indexed="true" stored="true" required="true"/><field name="province_id" type="int" indexed="true" stored="true" required="true"/><field name="district_id" type="int" indexed="true" stored="true" required="true"/>这些编号应该是不需要分词、需要索引、是否存储视情况⽽定;我这⾥设计为需要存储,并且设计为不能为空。
利用SOLR搭建企业搜索平台之二(中文分词)这篇文章,主要说的是怎么在solr中加入中文分词,参考了一些文章,但是还是花了不少时间才搞出的。
可能是大侠们太牛了,所以很多细节东西都没有写出来!但是要指出的是很多文章都是抄来抄去的!入正题:在上面的一个文章中,已经使solr跑起来了,在上面的基础上,加入中文分词。
我用的是paoding分词器!1》请下好paoding分词器,下载地址:/p/paoding/downloads/list,在这里要非常感谢paoding作者:qieqie在使用paoding的时候要注意:paoding的dic位置,也就是字典的位置,有两种办法解决:1)在系统环境变量中加入PAODING_DIC_HOME这个变量,值为paoding压缩包下面的dic的解压位置。
2)paoding-analysis.jar里面有个paoding-dic-home.properties文件,指定dic也可,但是要重新编译这个jar包,我采用的后面一种办法,只要每次固定好dic位置,部署还不是很不方便,设置环境变量我比较反感2》建立文件Java代码package com.yeedoo.slor.tokenizer;import java.io.Reader;import java.util.Map;import net.paoding.analysis.analyzer.PaodingTokenizer;import net.paoding.analysis.analyzer.TokenCollector;importnet.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector; import net.paoding.analysis.analyzer.impl.MostWordsTokenCollector; import net.paoding.analysis.knife.PaodingMaker;import org.apache.lucene.analysis.TokenStream;import org.apache.solr.analysis.BaseTokenizerFactory;public class ChineseTokenizerFactory extends BaseTokenizerFactory {/*** 最多切分默认模式*/public static final String MOST_WORDS_MODE = "most-words";/*** 按最大切分*/public static final String MAX_WORD_LENGTH_MODE ="max-word-length";private String mode = null;public void setMode(String mode) {if (mode == null || MOST_WORDS_MODE.equalsIgnoreCase(mode) || "default".equalsIgnoreCase(mode)) {this.mode = MOST_WORDS_MODE;} else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) { this.mode = MAX_WORD_LENGTH_MODE;} else {throw new IllegalArgumentException("不合法的分析器Mode参数设置:" + mode);}}@Overridepublic void init(Map<String,String> args) {super.init(args);setMode(args.get("mode").toString());}public TokenStream create(Reader input) {return new PaodingTokenizer(input, PaodingMaker.make(), createTokenCollector());}private TokenCollector createTokenCollector() {if (MOST_WORDS_MODE.equals(mode))return new MostWordsTokenCollector();if (MAX_WORD_LENGTH_MODE.equals(mode)) return new MaxWordLengthTokenCollector(); throw new Error("never happened");}}。
SolrCloud第一讲1目标使用solr实现电商网站的搜索功能。
2解决方案2.1方案一使用数据库搜索。
关系型数据库mysql、oracle等。
使用关系型数据库搜索商品信息,商品标题中包含关键的商品。
Select * from 商品表 where 商品标题 like ‘%冲锋衣%’海量数据中搜索速度非常慢,顺序扫描。
Like是否能使用索引?%%:不能使用索引关键词%:可以使用索引。
如果字段的长度大于255个字符,是不能创建索引的。
2.2方案二使用全文检索的方式来进行搜索。
在整篇文章中快速找到某些关键词提出的解决方案。
例如百度搜索、谷歌搜索、电商搜索。
好处:快、准确。
在数据库中搜索java关键词:使用like搜索JavaScript会被搜索出来,不符合预期。
在百度中搜索java:JavaScript不会被搜索出来。
技术方案:1、Lucene:使用java开发的全文检索工具包。
需要在Lucene基础上进行二次开发。
需要自己解决集群的问题、缓存的问题、大数据的问题。
2、Solr:使用Java开发的全文检索服务器。
基于Lucene的api开发。
只需要配置就可以实现全文检索。
3什么是Solr?Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引。
Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。
Solr不提供构建UI 的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。
Solr⾯试题1,solr内置查询参数有哪些?常⽤的参数: q - 查询字符串,必须的。
fl - 指定返回那些字段内容,⽤逗号或空格分隔多个。
start - 返回第⼀条记录在完整找到结果中的偏移位置,0开始。
rows - 指定返回结果最多有多少条记录,配合start来实现分页。
sort - 排序,⽰例:(inSock desc,price asc)表⽰先 ”inSock “降序,再”price “升序,默认时相关性降序 wt - (writer type)指定输出格式,可以有xml,json,php,phps。
fq - (filter query)过滤查询,作⽤:在q查询符合结果中同时时fq查询符合的,例如:q=mm&fq=date_time:[20000101 TO 20200101],找关键字mm,并且date_time是20000101 到 20200101之间的。
不常⽤的参数: q.op - 覆盖schemal.xml中的defaultOperator(有空格时⽤ “AND” 还是⽤“OR”操作逻辑),⼀般默认指定“OR” df - 默认的查询字段,⼀般默认指定 qt - (query type)指定那个类型来处理查询请求,⼀般不⽤指定,默认是standard。
indent - 返回的结果是否缩进,默认关闭,⽤indent=true|on开启,⼀般调试json,php,phps,ruby输出采⽤必要⽤这个参数 version - 查询语法的版本,建议不使⽤它,由服务器指定默认值2,solr逻辑运算符有哪些? AND,&&,OR,||,NOT,!1. Solr是什么?简的介绍⼀下这个技术是⼲嘛的solr是基于Lucene的,主要⽤作全⽂检索。
2. 同类型技术ElasticSearch,这个时候很⾃然的需要去了解两种技术的简单区别。
ElasticSearch vs Solr多维度分析对⽐3. ⼤概介绍介绍?最好加⼊⾃⼰的⼀些⼼得和总结2个端(服务端+客户端)涉及到服务器安装配置和客户端操作。
Solr5.5实现汉字的全拼、简拼和多音字搜索目录Solr5.5实现汉字的全拼、简拼和多音字搜索 (1)1. 概述 (1)1.1 全拼检索 (1)1.2 多音字搜索 (1)1.3 简拼搜索 (2)2.solr实现汉字的全拼、简拼和多音字检索 (2)2.1 调整表结构,为汉字列增加全拼列和简拼列 (2)2.2 生成汉字的拼音 (2)2.3 修改data-config.xml (3)2.4 修改schema.xml (4)2.5 实验 (5)2.5.1 全拼检索 (5)2.5.2 简拼检索 (6)2.5.3 多音字检索 (7)1.概述1.1 全拼检索由于中文的特点,如果搜索自动提示可以支持拼音的话会给用户带来更大的方便,免得切换输入法。
比如,输入“haidi”提示的关键字和输入“海底”提示的一样,输入“wan da”与输入“万达”提示的关键字一样。
1.2多音字搜索比如输入“chongqing”或者“zhongqing”都能提示出“重庆火锅”、“重庆烤鱼”、“重庆小天鹅”。
1.3 简拼搜索对于较长关键字,为了提高输入效率,有必要提供拼音缩写输入。
比如输入“hd”应该能提示出“haidi”相似的关键字,输入“wd”也一样能提示出“万达”关键字。
2.solr实现汉字的全拼、简拼和多音字检索2.1 调整表结构,为汉字列增加全拼列和简拼列定义:detail列存放检索的汉字内容;pinyin列存放detail列中汉字的拼音内容;abbre列存放detail列中汉字的拼音的仅留声母的简写内容;注意:碰到多音字时,要把汉字的不同拼音用逗号分隔,同时保存在列中。
范例:“重庆”中“重”是多音字,则保存“chongqing,zhongqing”范例:solrtest3表范例:solrtest1表2.2 生成汉字的拼音范例:“张三”的拼音是“zhangsan”,拼音简写是“zhs”,可以参考/lib/view/open1392087364364.html利用pinyin4j库为汉字生成拼音字符串。
solr面试题Solr(Search On Lucene的缩写)是一个开源的,基于Java的全文搜索服务器。
它提供了强大的搜索、索引和分析功能,使得它成为许多Web应用程序的首选搜索引擎。
在面试中,Solr面试题常常涉及Solr的基本概念、工作原理、常见问题和解决方案等方面。
本文将对Solr面试题进行详细探讨。
一、Solr的基本概念Solr是一个独立的企业级开源搜索平台,它建立在Apache Lucene库的基础上。
对于Solr的面试题,我们首先需要了解Solr的基本概念。
1.1 全文搜索:Solr是一个全文搜索引擎,它对文本进行索引,以实现更快速的搜索。
全文搜索是指通过搜索引擎对文本中的各个词语进行分词,并为这些词语建立索引,使得用户可以通过关键词快速找到所需的文档或数据。
1.2 倒排索引:Solr使用倒排索引来高效地进行搜索。
倒排索引是将词语和包含该词语的文档进行映射的数据结构,它可以快速定位包含关键词的文档。
通过倒排索引,Solr可以在海量数据中快速找到符合搜索条件的文档。
1.3 分布式搜索:Solr支持分布式搜索,通过将索引划分成多个分片(Shard),并在多台机器上进行存储和计算,从而实现更高的搜索性能和可扩展性。
二、Solr的工作原理在面试中,我们可能会被问到Solr的工作原理及其核心组件。
下面是Solr的工作原理简介及其核心组件的介绍。
2.1 Solr的工作原理:当用户提交一个搜索请求时,Solr首先对搜索条件进行解析和处理,然后根据索引中的倒排索引进行搜索,并计算每个文档的相关性得分,最后将搜索结果返回给用户。
2.2 核心组件:2.2.1 索引组件:索引组件负责将数据导入到Solr中,并为数据建立索引。
它提供了丰富的文本解析和处理功能,以及数据导入的方式配置。
2.2.2 检索组件:检索组件负责处理搜索请求,并根据索引中的倒排索引进行搜索操作。
它提供了强大的查询语法和过滤器功能,以便用户可以灵活地定义搜索条件。
java中solr的面试题Solr是一个基于Java的开源搜索平台,它提供了强大的全文检索和相关性排序功能。
在Java开发中,面试官经常会询问Solr相关的问题,以评估面试者对搜索引擎和全文检索的理解和掌握程度。
本文将介绍几个常见的Solr面试题。
1. 简要介绍一下Solr的特点和用途。
Solr是一个快速、高效的搜索平台,具有以下特点和用途:- 快速:Solr使用倒排索引来加速搜索,能够处理海量的数据。
- 精确度:Solr支持全文检索和相关性排序,能够准确地找到匹配搜索关键词的结果。
- 高可用性:Solr支持分布式搜索和复制,可以实现高可用性和负载均衡。
- 可扩展性:Solr可以通过添加插件和自定义扩展功能,满足不同的需求。
- 支持多种数据源:Solr可以处理结构化和非结构化数据,如文本、XML、CSV等。
2. 什么是倒排索引?Solr中如何使用倒排索引来实现快速搜索?倒排索引(Inverted Index)是一种数据结构,将文档中的词汇映射到文档的位置,方便进行倒排和搜索。
在Solr中,倒排索引可以通过以下步骤实现快速搜索:- 分词处理:将文档拆分成词汇单元,去除停用词和特殊字符。
- 倒排索引建立:将每个词汇与出现该词汇的文档列表建立映射关系。
每个文档列表包含了该词汇在文档中出现的位置信息。
- 相关性排序:根据搜索关键词在倒排索引中查找匹配的文档,并根据相关性评分进行排序。
3. Solr中的核(Core)是什么?如何创建和管理核?在Solr中,核是用于存储和处理索引数据的独立实体。
每个核都包含了一套配置文件、索引数据和搜索处理器。
多个核可以同时运行在同一个Solr服务器上,每个核都有独立的索引和搜索功能。
创建和管理核可以通过以下步骤完成:- 创建新的核:使用Solr的管理界面或通过命令行工具创建新的核,并指定配置文件和数据目录。
- 加载和卸载核:可以通过修改Solr的配置文件或使用API来加载和卸载核。
【黑马程序员】面试题-利用solr实现商品的搜索功能问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据不可能是根据数据库的字段查询的,那是怎么查询出来的呢,为什么千奇百怪的关键字都可以查询出来呢?答案就是全文检索工具的实现,luncence采用了词元匹配和切分词。
举个例子:北京天安门------luncence切分词:北京京天天安安门等等这些分词。
所以我们搜索的时候都可以检索到。
有一种分词器就是ik中文分词器,它有细粒度切分和智能切分,即根据某种智能算法。
这就使用solr的最大的好处:检索功能的实现。
使用步骤;(1)solr服务器搭建,因为solr是用java5开发的,所以需要jdk和tomcat。
搭建部署(2)搭建完成后,我们需要将要展示的字段引入solr的库中。
配置sring与solr结合,工程启动的时候启动solr(3)将数据库中的查询内容导入到solr索引库,这里使用的是solrj的客户端实现的。
具体使用可以参考api(4)建立搜索服务,供客户端调用。
调用solr,查询内容,这中间有分页功能的实现。
solr高亮显示的实现。
(5)客户端接收页面的请求参数,调用搜索服务,进行搜索。
业务字段判断标准:1、在搜索时是否需要在此字段上进行搜索。
例如:商品名称、商品的卖点、商品的描述(这些相当于将标签给了solr,导入商品数据后,solr对这些字段的对应的商品的具体内容进行分词切分,然后,我们就可以搜索到相关内容了)2、后续的业务是否需要用到此字段。
例如:商品id。
需要用到的字段:1、商品id2、商品title3、卖点4、价格5、商品图片6、商品分类名称7、商品描述Solr中的业务字段:1、id——》商品id其他的对应字段创建solr的字段。
[AppleScript] 纯文本查看复制代码?01 02 03 04 05 06 07<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"08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23stored="true"/><field name="item_image" 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" stored="false" /><field name="item_keywords" type="text_ik" indexed="true"stored="false" 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"/>重新启动tomcatSolr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
Solr是一个全文检索服务器,只需要进行配置就可以实现全文检索服务。
有效降低频繁访问数据库对数据库造成的压力。
第一步:将solr部署在linux系统下。
第二步:solrJ是solr的客户端,使用它需要依赖solrJ的jar包。
第三步:将数据库的内容添加到solr的索引库,这样查询就在索引库查询,而不是数据库了。
controller层:[AppleScript] 纯文本查看复制代码?01 02 03 04 05 06 07 08 09 10 11 12@Controller@RequestMapping("/manager")public class ItemController {@Autowiredprivate ItemService itemService;@RequestMapping("/importall")@ResponseBodypublic TaotaoResult importAllItem(){TaotaoResult result=itemService.importAllItem();return result;}}<br>service层编写:<br>多表查询商品,显示在页面的逻辑编写:<br>mapper.java[AppleScript] 纯文本查看复制代码?01 02 03 04 05 06 07 08 09 10 11package com.taotao.search.mapper;import java.util.List;import com.taotao.search.pojo.Item;public interface ItemMapper {List<item> getItemList();}</item>mapper.xml [AppleScript] 纯文本查看复制代码?01 02 03 04<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.taotao.search.mapper.ItemMapper">05 06 07 08 09 10 11 12 13 14 15 16 17<select id="getItemList" resultType="com.taotao.search.pojo.Item"> SELECTa.id,a.title,a.sell_point,a.price,a.image,b. NAME category_nameFROMtb_item aLEFT JOIN tb_item_cat b ON a.cid = b.id</select></mapper>四步:从索引库查询的逻辑编写:[AppleScript] 纯文本查看复制代码?01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24//从索引库里面获取商品信息,现在这个dao层是从索引库获取信息,因为之前的写的逻辑是将db里面的数据导入到索引库。
后面的查询都是从索引库中进行,而不从数据库了@Repositorypublic class SearchDaoImpl implements SearchDao {@Autowiredprivate SolrServer solrServer;@Overridepublic SearchResult search(SolrQuery query) throws Exception {//这是从索引库里面,直接执行查询QueryResponse response = solrServer.query(query);//获取查询的结果SolrDocumentList documentList=response.getResults();SearchResult result=new SearchResult();//这是获取总记录数result.setRecordCount(documentList.getNumFound());List<Item> itemList=new ArrayList<>();//商品的高亮显示,即当鼠标移到字上时,该字体变色,这是从QueryResponse中获取的25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();for (SolrDocument solrDocument : documentList) {//每个SolrDocument都是一个商品pojo的内容,所以这里要创建一个商品的pojo对象,来获取详细的字段Item item=new Item();item.setId((String)solrDocument.get("id"));//高亮显示是title的高亮显示List<String> list =highlighting.get(solrDocument.get("id")).get("item_title");String 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);return result;}}第五步:索引库内容建立好后,开始编写对外的服务接口,即通过条件搜索具体的商品,比如手机,会显示出总共的手机列表信息,第几页,总共多少页,总共多少个搜索结果请求的url:file:///C:/Users/ADMINI~1.WIN/AppData/Local/Temp/V7(XMW RN]%7BG8~CI%7DBCCR3QC.gif arch/query?q={查询条件}&page={page}&rows={rows}返回的结果:TaotaoResult包装商品列表。