接着solr测试项目(中)–整合spring-data-mongo 和solr测试项目(上)–基于maven的springmvc环境搭建
今天开始导入数据和实现查询
如果没有定义Fields,那么所有的Fields都是数组类型[]
所以第一步就是根据对象模型创建Fields,这里使用Schema API,而且类型都很简单。
Fields创建好之后,新增的数据
在用schema api创建fields的时候没有为中文分词,导致查询时将所有的中文按照汉字一个一个分开,只要匹配到就查询到任何一个就被查询出来
查询“猫和老鼠”,正确的查询结果应该只有一个,而实际查询除了3个,如果自定字段查询比如name:猫和老鼠,那么只能是完全匹配,像这个name是“猫和老鼠爆笑精华版”的就无法匹配到
参考Solr6.1配置中文分词 配置好中文分词,并定义了一个fieldType为text_ik
第一步 创建field
接口地址
http://localhost:8983/solr/wechat/schema请求方式:POST 请求报文:
{ "add-field" : { "name" : "name", "type" : "text_ik" }, "add-field" : { "name" : "actors", "type" : "text_ik" }, "add-field" : { "name" : "description", "type" : "text_ik" }, "add-field" : { "name" : "directors", "type" : "text_ik" } }重建索引
现在已name:猫和老鼠就可以查到了,如果没有中文分词,name必须是猫和老鼠爆笑精华版
我们测试一下没有分词的样子
新建一个testcore
使用schema api创建fields,因为如果不创建的话就是数组类型。
接口地址
http://localhost:8983/solr/testcore/schema请求方式:POST 请求报文:
{ "add-field" : { "name" : "name", "type" : "string" }, "add-field" : { "name" : "actors", "type" : "string" }, "add-field" : { "name" : "description", "type" : "string" }, "add-field" : { "name" : "directors", "type" : "string" }, "add-field" : { "name" : "showtime", "type" : "string" }, "add-field" : { "name" : "imgurl", "type" : "string" }, "add-field" : { "name" : "playcount", "type" : "int" }, "add-field" : { "name" : "userscore", "type" : "int" }, "add-field" : { "name" : "imguistyle", "type" : "int" } }接下来我们导入数据,倒入数据后看一下具体的一条数据
没有中文分词
SolrQuery query = new SolrQuery(); query.setQuery("name:猫和老鼠"); QueryResponse rsp = client.query(query); SolrDocumentList docs = rsp.getResults(); System.out.println(docs); query.setQuery("name:猫和老鼠爆笑精华版"); QueryResponse rsp1 = client.query(query); SolrDocumentList docs1 = rsp1.getResults(); System.out.println(docs1);没有配置分词必须完全匹配
如果配置了分词则都可以查找到
从头到尾测试了一下solr,也总结了一下之前用过的maven,spring,mongo,solr