黑马程序员技术交流社区
标题: 【太原校区】solr导入数据库数据 [打印本页]
作者: 王高飞 时间: 2018-12-19 13:39
标题: 【太原校区】solr导入数据库数据
本帖最后由 王高飞 于 2018-12-19 13:39 编辑
一 solr添加自定义Field
1 找到SorlHome下的config/schema.xml 修改内部的配置
内部配置说明:
1 field:
name:域名称
type:域类型 这里的type不是普通的 而是solr中的类型
indexed:是否创建索引
store:是否存储
required:必须的
multiValued:是否可多值 放到数组里 存储一个用户的好友id(多个)
2 dynamicField: *_i 动态域,扩展了域 可以使用域名:size_i,name_i,gender_i,school_i等
3 <uniqueKey>id</uniqueKey> :id作为唯一标识
4 copyField属性:source源域名
dest目标域名
可以将多个Field复制到一个Field中,以便进行统一的检索
用来做分组查询 查目标域名就是查所有的源域 or连接
5 FieldType:类型
name:是这个FieldType的名称
class:是Solr提供的包solr.TextField,solr.TextField 允许用户通过分析器来定制索引和查询,分析器包括一个分词器(tokenizer)和多个过滤器(filter)
positionIncrementGap:可选属性,定义在同一个文档中此类型数据的空白间隔,避免短语匹配错误,此值相当于Lucene的短语查询设置slop值,根据经验设置为100。
6 默认情况下:
索引分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,solr.LowerCaseFilterFactory小写过滤器。
搜索分析器中:使用solr.StandardTokenizerFactory标准分词器,solr.StopFilterFactory停用词过滤器,这里还用到了solr.SynonymFilterFactory同义词过滤器。
2 自定义Field 自定义FieldType 使用分析器IKAnayner 在schema.xml中加以下配置:
//自定义field
[XML] 纯文本查看 复制代码
<field name="title_ik" type="text_ik" indexed="true" stored="true" />
<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>
//自定义类型 使用IKAnalyzer分词器-->
[XML] 纯文本查看 复制代码
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
3 把IKAnalyzer2012FF_u1.jar添加到服务器下的solr项目 solr/WEB-INF/lib
4 把IKAnayner的3个配置文件(配置文件和自定义词典和停用词词典)放到项目WEB-INF/classes文件夹下 没有classes就创建该文件夹
二 数据库的数据导入到索引库中
定义dataimport-handler: lib 加载的jar
1 导入jar 两个 放到solrHome\collection1\lib 没有lib自己创建的lib 再添加驱动包
solr-4.10.3\dist\solr-dataimporthandler-extras-4.10.3.jar
solr-4.10.3\dist\ solr-dataimporthandle-4.10.3.jar
2 配置solrHome\collection1\conf\solrconfig.mxl文件,添加一个requestHandler。
[XML] 纯文本查看 复制代码
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
3 创建配置文件data-config.xml 放到solrconfig.xml同目录 添加数据库的配置 添加数据库驱动jar
[XML] 纯文本查看 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/solr"
user="root"
password="root"/>
<document>
<entity name="product" query="SELECT pid,name,catalog_name,price,description,picture FROM products ">
<field column="pid" name="id"/>
<field column="name" name="product_name"/>
<field column="catalog_name" name="product_catalog_name"/>
<field column="price" name="product_price"/>
<field column="description" name="product_description"/>
<field column="picture" name="product_picture"/>
</entity>
</document>
</dataConfig>
4 在SorlHome下的config/schema.xml文件中自定义域:
[XML] 纯文本查看 复制代码
<!--类型IKAnalyzer 使用Ik分析器-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
//已经定义好的类型分析器text_ik 已经有的域就不用定义了 id域
[XML] 纯文本查看 复制代码
<field name="product_name" type="text_ik" indexed="true" stored="true"/>
<field name="product_price" type="float" indexed="true" stored="true"/>
<field name="product_description" type="text_ik" indexed="true" stored="false" />
<field name="product_picture" type="string" indexed="false" stored="true" />
<field name="product_catalog_name" type="string" indexed="true" stored="true" />
<field name="product_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="product_name" dest="product_keywords"/>
<copyField source="product_description" dest="product_keywords"/>
5 再次重启tomcat 点击“execute”按钮导入数据
导入数据前会先清空索引库,然后再导入。
三 solr设置条件查询
q:查询条件
fq:过滤掉查询结果中id为1的 id:1 在q查询符合结果中同时是fq查询符合的
[包含临界值] price:[0 TO 5]
{不包含临界值} price:{* To 100}
sort: 按照id升序 id asc
按照id降序 id desc
start,rows:分页 默认显示10条
start:开始查询的索引
rows:显示的条数
fl:id title 显示要显示的列/域 指定返回那些字段内容,用逗号或空格分隔多个
df:可以指定默认查询的域 查询条件就可以简写了直接写该域的值
wt:写出的数据格式 xml, json, php, phps等
hl:enable highlight 高亮显示 hl是否高亮 ,设置高亮Field,设置格式前缀和后缀。
fl:要高亮显示的列 product_name
hl.simple.pre:开始标签 <span color="red">
hl.simple.post:结束标签</span>
四 在java代码中设置solr查询条件:
[Java] 纯文本查看 复制代码
solrQuery.setQuery("花儿朵朵")//设置主条件
solrQuery.add("fq", "product_catalog_name:时尚卫浴");//设置过滤条件
//注意多个fq条件的时候要使用add添加多个条件 不能使用set,set会覆盖前面的条件
solrQuery.setStart(0);//设置起始位置
solrQuery.setRows(10);//设置条数
solrQuery.add("df","product_keywords");//设置默认查询的域名
solrQuery.setSort("product_price", ORDER.asc);//设置排序
//设置高亮的字段 主查询条件必须有的
solrQuery.setHighlight(true);//开启高亮
solrQuery.setHighlightSimplePre("<span color=\"red\">");
solrQuery.setHighlightSimplePost("</span>");
solrQuery.addHighlightField("product_name");//高亮需要包住的字段
查询出来的总条数:results.getNumFound()
作者: Vicky韦 时间: 2018-12-19 13:47
作者: 张兆秋 时间: 2018-12-19 13:47
mark
作者: cuichang1 时间: 2018-12-19 13:49
作者: miaohangbo 时间: 2018-12-19 13:49
谢谢分享~
作者: 张志辉 时间: 2018-12-19 14:38
学习了,很详细
作者: liudongjie 时间: 2018-12-19 18:48
作者: Julien27 时间: 2018-12-19 19:52
关于原理部分,请参考: http://www.importnew.com/12707.html
作者: 郝永亮 时间: 2018-12-19 20:56
作者: 达摩侠 时间: 2018-12-20 12:44
顶顶顶顶顶起来
作者: renhua 时间: 2018-12-20 13:28
作者: liuchengwei1 时间: 2018-12-20 18:52
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |