当前位置: 首页 > news >正文

网站建设 博采网络南京江宁网站制作

网站建设 博采网络,南京江宁网站制作,网络营销业务流程,wordpress彩色框一#xff1a;安装配置 下载完成之后#xff0c;解压solr文件#xff0c;解压tomcat 1.1 在tomcat安装solr,并且建立solrCore 把solr5.5目录下的server/solr-webapp/webapp 重命名为solr,并且放置到tomcat/webapp的目录下。 打开tomcat/webapp/solr/WEB-INF/web.xml新建…一安装配置 下载完成之后解压solr文件解压tomcat 1.1 在tomcat安装solr,并且建立solrCore 把solr5.5目录下的server/solr-webapp/webapp 重命名为solr,并且放置到tomcat/webapp的目录下。 打开tomcat/webapp/solr/WEB-INF/web.xml新建一个文件夹不要中文目录用来做solrHome也就是solrCore的实例存放位置在tomcat/webapp/solr/WEB-INF/web.xml中配置solr的地址 在tomcat/webapp/solr/WEB-INF/文件夹中建立classes目录 把solr5.5/server/resource/log4j.properties 复制到上一步建立的classes目录中把solr5.5/server/lib/ext/目录下的所有jar文件复制到tomcat/webapp/solr/WEB-INF/lib/中这是一些日志用的jar包不然启动报错。这个时候可以输入http://127.0.0.1:8080/solr/admin.html来访问到solr的控制界面了。接下来就是创建solrCore。目前solrHome目录是空的我们创建一个空文件夹core1这个就是我们的一个实例然后把solr5.5/server/solr/configsets/sample_techproducts_configs/conf/ 这个文件复制到solrHome/core1中。把solr5.5/server/solr/solr.xml复制到solrHome目录下。在solr的管理控制台界面添加一个core1 这下就创建成功了一个实例core1,yge 请注意我打码的部分需要先执行第11步操作否则的话会无法创建solr core也就是会有错误信息这是solr的一个bug但是至今没有修复。 1.2 安装ik中文分词器 准备好ik分词器的jar包可以自己编译也可以下载我生成的。然后把它复制到tomcat/webapp/solr/WEB-INF/lib里面。(千万不要复制到tomcat/lib中这样会找不到lucene的类)打开solrHome/core1/conf/managed-schema文件在最下方追加如下配置 fieldType nametext_ik classsolr.TextFieldanalyzer typeindex useSmartfalseclassorg.wltea.analyzer.lucene.IKAnalyzer /analyzer typequery useSmarttrueclassorg.wltea.analyzer.lucene.IKAnalyzer //fieldType 启动tomcat即可看到text_ik分词 1.3 插入的文档必须与域相匹配 域我个人也称它为字段它在solr中有特定的含义就类似数据库中表的列一样规范着写入的数据我们先来做个例子。 可以看到我这次插入的文档有idtitle当然在solr中每一条记录都必须有着一个唯一的id它就类似数据库中的主键不可重复。这条记录的插入是成功的。 但是如果我把title改成title1,这就与定义的字段不一样了就会报错如下图所示 可以看到这里提示未知的字段 title1. 1.4 域的定义 field 先拿出一条配置来看一下 field nameid typestring indexedtrue storedtrue requiredtrue multiValuedfalse / 认识一下这些属性 name:域名 type:域的类型必须匹配类型不然会报错 indexed:是否要作索引 stored:是否要存储 required:是否必填一般只有id才会设置 multiValued:是否有多个值如果设置为多值里面的值就采用数组的方式来存储比如商品图片地址(大图中图小图等) 1.5 配置动态域 dynamicField 同样的也先拿出一条来看看 dynamicField name*_i typestring indexedtrue storedtrue multiValuedtrue / 何谓动态域呢就是这个域的名称是由表达式组成的只要名称满足了这个 表达式就可以用这个域 同样的认识一下这些属性 name:域的名称该域的名称是通过一个表达式来指定的只要符合这这个规则就可以使用这个域。比如  aa_i,bb_i,13_i等等只要满足这个表达式皆可 type:对应的值类型相应的值必须满足这个类型不然就会报错 indexed:是否要索引 stored:是否要存储 ...其它的属性与普通的域一至 1.6 主键域 uniqueKey 给出一条配置 uniqueKeyid/uniqueKey 指定一个唯一的主键每一个文档中都应该有一个唯一的主键这个值不要随便改 1.7 复制域 copyField 给出一条配置 copyField sourcecat desttext/ 说明一下相应的属性 source:源域 dest:目标域 复制域将源域的内容复制到目标域中 注意目标域必须是允许多值的如下nultiValued必须为true因为可能多个源域对应一个目标域所以它需要以数组来存储 field nametext typestring indexedtrue storedtrue multiValuedtrue/ 1.8 域的类型 fieldType 同样的给出一段配置这段稍微有点复杂 fieldType nametext_general classsolr.TextField positionIncrementGap100analyzer typeindextokenizer classsolr.StandardTokenizerFactory/filter classsolr.StopFilterFactory ignoreCasetrue wordsstopwords.txt /!-- in this example, we will only use synonyms at query timefilter classsolr.SynonymFilterFactory synonymsindex_synonyms.txt ignoreCasetrue expandfalse/--filter classsolr.LowerCaseFilterFactory//analyzeranalyzer typequerytokenizer classsolr.StandardTokenizerFactory/filter classsolr.StopFilterFactory ignoreCasetrue wordsstopwords.txt /filter classsolr.SynonymFilterFactory synonymssynonyms.txt ignoreCasetrue expandtrue/filter classsolr.LowerCaseFilterFactory//analyzer/fieldType 给出相应属性的说明 name:域的名称 class:指定solr的类型 analyzer:分词器的配置 type: index(索引分词器)query(查询分词器) tokenizer:配置分词器 filter:过滤器 1.9 业务字段的实际配置 经过上面的学习差不多了解了一些常用的配置如今我们用field来配置实际的业务字段有属性如下 当然中文分词还是要用的因为我们在前面的  1.2  章节中已经配置了一个fieldType的中文分词所以我们现在一律用中文分词的域类型 主键的id就不需要配置了默认已经把id配置为主键了默认的配置如下 field nameid typestring indexedtrue storedtrue requiredtrue multiValuedfalse / 商品名称(需要分词需要存储) field namename typetext_ik indexedtrue storedtrue / 商品分类(不需要分词需要存储) field namecatalog typeint indexedfalse storedtrue / 商品分类名称(需要分词需要存储) field namecatalog_name typetext_ik indexedtrue storedtrue / 商品价格(不分词需要存储) field nameprice typedouble indexedfalse storedtrue / 商品描述(需要分词不需要存储) field namedescription typetext_ik indexedtrue storedfalse / 商品图片(不需要分词需要存储) field namepicture typestring indexedfalse storedtrue / 复制域的应用 前面我们了解了复制域但是却不知道它的应用场景现在我们结合实际情况来讲一下复制域 用户在搜索框搜索的时候有可能输入的是商品名称也有可能输入的是商品描述也有可能输入的是一个商品类型那么这些值的搜索肯定在后台是对应一个域的那么既然如此我们就可以把这些域合并成一个这样在后台只需要单独的对这一个域进行搜索就可以了 先定义一个目标域 field namekeywords typetext_ik indexedtrue storedfalse multiValuedtrue/ 复制域把商品名称商品描述商品类型名称复制到上面的这个域中 copyField sourcename destkeywords/ copyField sourcecatalog_name destkeywords/ copyField sourcedescription destkeywords/ 1.10 dataimport 导入数据库数据 solr默认是没有开启dataimport这个功能的所以我们要经过一点配置来开启它 首先找到solr5.5/dist/solr-dataimporthandler-5.5.2.jar把这个文件复制到tomcat/webapp/solr/WEB-INF/lib/下并且找到相应数据库的驱动包也同样放到该目录。我这里用的是mysql的驱动包。找到solr5.5/example/example-DIH/solr/db/conf/db-data-config.xml把其复制到solrHome/core1/conf/下并改名为data-config.xml.找到solrHome/core1/conf/solrconfig.xml并打开在里面添加一段内容如下 requestHandler name/dataimport classsolr.DataImportHandlerlst namedefaultsstr nameconfigdata-config.xml/str/lst/requestHandler 打开并编辑data-config.xml完整的配置文件如下 dataConfig!-- 这是mysql的配置学会jdbc的都应该看得懂 --dataSource drivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/solr/useUnicodetruecharacterEncodingutf-8 userroot password密码/document!-- name属性就代表着一个文档可以随便命名 --!-- query是一条sql代表在数据库查找出来的数据 --entity nameproduct queryselect * from products!-- 每一个field映射着数据库中列与文档中的域column是数据库列name是solr的域(必须是在managed-schema文件中配置过的域才行) --field columnpid nameid/field columnname nameproduct_name/field columncatalog nameproduct_catalog/field columncatalog_name nameproduct_catalog_name/field columnprice nameproduct_price/field columndescription nameproduct_description/field columnpicture nameproduct_picture//entity/document /dataConfig 重启tomcat然后会看到如下页面 点击蓝色的按钮则开始导入导入过程依据数量量的大小需要的时间也不同可以点击右边的Refresh status来刷新状态可以查看当前导入了多少条。导入成功如下 二solrj的使用 上面一章节已经讲完了solr的安装与配置现在说一下使用solrj来维护solr的索引及操作solrj就是一个java的客户端是一个jar包的使用 首先引入MAVEN的依赖solrj的版本号要对应solr的版本号 dependencygroupIdorg.apache.solr/groupIdartifactIdsolr-solrj/artifactIdversion5.5.2/version/dependency 2.1 增加及修改 首先说明在solr中增加与修改都是一回事当这个id不存在时则是添加当这个id存在时则是修改 代码很好理解直接给出 private String serverUrl http://192.168.1.4:8080/solr/core1;/*** 增加与修改br* 增加与修改其实是一回事只要id不存在则增加如果id存在则是修改* throws IOException * throws SolrServerException */Testpublic void upadteIndex() throws SolrServerException, IOException{//已废弃的方法//HttpSolrServer server new HttpSolrServer(http://192.168.1.4:8080/solr/core1);//创建HttpSolrClient client new HttpSolrClient(serverUrl);SolrInputDocument doc new SolrInputDocument();doc.addField(id, zxj1);doc.addField(product_name, javaWEB技术);doc.addField(product_catalog, 1);doc.addField(product_catalog_name, 书籍);doc.addField(product_price, 11);doc.addField(product_description, 这是一本好书);doc.addField(product_picture, 图片地址);client.add(doc);client.commit();client.close();} 2.2 删除索引 删除的代码也直接给出看代码里面的注释就可以了 /*** 删除索引* throws Exception*/Testpublic void deleteIndex()throws Exception{HttpSolrClient client new HttpSolrClient(serverUrl);//1.删除一个client.deleteById(zxj1);//2.删除多个ListString ids new ArrayList();ids.add(1);ids.add(2);client.deleteById(ids);//3.根据查询条件删除数据,这里的条件只能有一个不能以逗号相隔client.deleteByQuery(id:zxj1);//4.删除全部删除不可恢复client.deleteByQuery(*:*);//一定要记得提交否则不起作用client.commit();client.close();} 2.3 查询 查询稍微复杂一点但是与solr管理界面的条件一致 q - 查询字符串如果查询所有*:* (id:1)fq - filter query过虑查询过滤条件基于查询出来的结果fl - 指定返回那些字段内容用逗号或空格分隔多个。start - 分页开始rows - 分页查询数据sort - 排序格式sortfield namedesc|asc[,field namedesc|asc]… 。示例score desc, price asc表示先 “score” 降序, 再 “price” 升序默认是相关性降序。wt - (writer type)指定输出格式可以有 xml, json, php, phps。fl表示索引显示那些field( *表示所有field,如果想查询指定字段用逗号或空格隔开如Name,SKU,ShortDescription或Name SKU ShortDescription【注字段是严格区分大小写的】)q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或)hl 是否高亮 ,如hltruehl.fl 高亮field ,hl.flName,SKUhl.snippets :默认是1,这里设置为3个片段hl.simple.pre 高亮前面的格式hl.simple.post 高亮后面的格式facet 是否启动统计facet.field 统计field 1. “:” 指定字段查指定值如返回所有值*:* 2. “?” 表示单个任意字符的通配 3. “*” 表示多个任意字符的通配不能在检索的项开始使用*或者?符号 4. “~” 表示模糊检索如检索拼写类似于”roam”的项这样写roam~将找到形如foam和roams的单词roam~0.8检索返回相似度在0.8以上的记录。 5. 邻近检索如检索相隔10个单词的”apache”和”jakarta””jakarta apache”~10 6. “^” 控制相关度检索如检索jakarta apache同时希望去让”jakarta”的相关度更加好那么在其后加上”^”符号和增量值即jakarta^4 apache 7. 布尔操作符AND、|| 8. 布尔操作符OR、 9. 布尔操作符NOT、!、- 排除操作符不能单独与项使用构成查询 10. “” 存在操作符要求符号””后的项必须在文档相应的域中存在 11. ( ) 用于构成子查询 12. [] 包含范围检索如检索某时间段记录包含头尾date:[200707 TO 200710] 给出基本的代码看一下仅仅作为一个基本的查询高级的查询各位要自己结合文档 package zxj.solrj;import java.util.List; import java.util.Map;import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.junit.Test;/*** 搜索* author Administrator**/ public class IndexSearch {private String serverUrl http://192.168.1.4:8080/solr/core1;Testpublic void search()throws Exception{HttpSolrClient client new HttpSolrClient(serverUrl);//创建查询对象SolrQuery query new SolrQuery();//q 查询字符串如果查询所有*:*query.set(q, product_name:小黄人);//fq 过滤条件过滤是基于查询结果中的过滤query.set(fq, product_catalog_name:幽默杂货);//sort 排序请注意如果一个字段没有被索引那么它是无法排序的 // query.set(sort, product_price desc);//start row 分页信息与mysql的limit的两个参数一致效果query.setStart(0);query.setRows(10);//fl 查询哪些结果出来不写的话就查询全部所以我这里就不写了 // query.set(fl, );//df 默认搜索的域query.set(df, product_keywords);//高亮设置//开启高亮query.setHighlight(true);//高亮域query.addHighlightField(product_name);//前缀query.setHighlightSimplePre(span stylecolor:red);//后缀query.setHighlightSimplePost(/span);//执行搜索QueryResponse queryResponse client.query(query);//搜索结果SolrDocumentList results queryResponse.getResults();//查询出来的数量long numFound results.getNumFound();System.out.println(总查询出: numFound 条记录);//遍历搜索记录//获取高亮信息MapString, MapString, ListString highlighting queryResponse.getHighlighting();for (SolrDocument solrDocument : results) {System.out.println(商品id: solrDocument.get(id));System.out.println(商品名称 : solrDocument.get(product_name));System.out.println(商品分类: solrDocument.get(product_catalog));System.out.println(商品分类名称: solrDocument.get(product_catalog_name));System.out.println(商品价格: solrDocument.get(product_price));System.out.println(商品描述: solrDocument.get(product_description));System.out.println(商品图片: solrDocument.get(product_picture));//输出高亮 MapString, ListString map highlighting.get(solrDocument.get(id));ListString list map.get(product_name);if(list ! null list.size() 0){System.out.println(list.get(0));}}client.close();} } 注意没有索引的域是不能用作排序的
http://www.yingshimen.cn/news/28522/

相关文章:

  • 怎么用手机创建网站wordpress删除评论框
  • 网站客户留言网站建设的价值
  • 成都家具网站建设织梦m网站伪静态
  • 做化学题的网站可以做试卷网站数学试卷小学六
  • 购物网站设计说明网站更新维护页面
  • 广州网站服务做移动端网站设计
  • 南充网站开发浙江华企网站做的咋样
  • 深圳团购网站建设python flask做网站
  • 杭州网站建设公司服务市场调研报告怎么写的
  • 一键生成文案的网站中原彼得堡航空学院网站的建设
  • php mysql网站开发...手机模块网站
  • 网站推广上首页杭州网站建设怎么样
  • 南宁网站建设gxskm推广最有效的办法
  • 购物建设网站费用建网站收费吗
  • 好看的扁平化网站软文发布平台哪家好
  • 电商网站建站建设工程信息网官网入口查询
  • 商城网站开发嵌入支付宝注册网店需要多少费用
  • dw做网站首页长宽设置多少开发app的费用
  • 怀化医保网站linux虚机 wordpress
  • 网站维护项目秦皇岛网站推广
  • 网站排名推广怎么做标书制作代做公司
  • 途牛的旅游网站是谁做的如何建设一个稳定的网站
  • 网站发展建设思路标志空间 网站
  • 设计图片网站哪个好网站如何做搜索引擎
  • 电子商城网站开发的背景郑州网站+建设
  • 网站内容相同算侵权吗网络推广服务费会计账务处理
  • 专做教育网站拿站1688黄页网女性
  • 四川省建设监理协会网站志愿服务网站建设方案
  • 做网站需要准备些什么邢台提供网站设计公司哪家专业
  • 什么可以做冷门网站企业融资计划书