solr的原理不和大家一一讲述,主要讲solr在使用过程中的注意事项
一.solr建立服务
首先是安装solr,安装步骤省略。。。。(不要说我懒,安装步骤导出都是。。。)
成功之后 需要在solr里面建立一个针对你的业务的服务,我想建立一个叫做discuz的服务
./bin/solr create -c discuz
然后你在你的solr目录 :solr-5.5.3/server/solr/ 下看见了discuz ,这是你刚刚创建的,针对某一业务的整个搜索配置都是在这个目录下配置的。
discuz目录解析:
1.conf :配置文件(索引、分词库、停词库等等配置)
2.core.properties
3.data
二.建立索引
建立索引就是数据库和solr建立一个关系,可以满足数据库数据定时导入solr里面,方面solr实现搜索。那么怎么建立索引呢?
在solr-5.5.3/server/solr/discuz/conf/data-config.xml 里面
<dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://11.11.11.11:800/database" user="root" password="123456"/> <document> <entity name="database" query="SELECT * FROM table; " deltaQuery="SELECT id FROM table where `create` > unix_timestamp('${dataimporter.last_index_time}' ; " deltaImportQuery="SELECT * FROM table where id =${dataimporter.delta.tid}" pk='tid'> <field column="id" name="id" /> <field column="subject" name="subject" /> <field column="views" name="views" /> <field column="vip" name="vip" /> <field column="message" name="message" /> <field column="create" name="create" /> </entity> </document> </dataConfig>
dataConfig 里面是对数据库导入的一个配置
dataSource:数据库连接配置
document:数据库索引配置
entity:name= 数据库名字
query=全量导入数据的sql
deltaQuery:增量导入的id
deltaImportQuery:增量导入的sql
解释一下全量和增量:正常数据库导入solr第一次是全部导入,但是随着时间的变化数据库和solr数据不一致,这时候需要再次导入,按时间技术,半小时或者更合适的时间,只需要增量导入即可,更合适的时间再次全量导入即可
field 这些是返回字段的定义
==到现在数据库和solr的关系完事了,下面是solr自身对这些字段的处理
三.solr 对展示字段以及搜索的配置
在solr-5.5.3/server/solr/discuz/conf/solrconfig.xml
1.添加一下代码
<schemaFactory class="ManagedIndexSchemaFactory"> <bool name="mutable">true</bool> <str name="managedSchemaResourceName">managed-schema</str> </schemaFactory>
在conf下面的 managed-schema 文件里对索引配置
1.配置中文分词mmseg4j
<!-- mmseg4j--> <fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" > <analyzer type="index"> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> </analyzer> <analyzer type="query"> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> </analyzer> </fieldType> <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" > <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/> </analyzer> </fieldType> <fieldType name="text_mmseg4j_simple" class="solr.TextField" positionIncrementGap="100" > <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="solr-5.5.3/server/solr/discuz/conf/dic"/> </analyzer> </fieldType> <!-- mmseg4j-->
solr-5.5.3/server/solr/discuz/conf/dic:中文分词的分词库目录,在改目录下放word.dic分词文件
stopwords.txt:停词文件
synonyms.txt:近义词文件
analyzer type="index":索引检查分词、停词、近义词
analyzer type="query":查找检查分词、停词、近义词
2.配置索引字段、字段类型、查询字段的中文分词类型
<field name="submes" type="text_mmseg4j_complex" indexed="true" stored="true" required="true" multiValued="true" />
<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="vip" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="views" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="create" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="subject" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="message" type="text_general" indexed="true" stored="true" required="true" multiValued="false" />
<copyField source="subject" dest="submes" />
<copyField source="vip" dest="submes" />
<copyField source="views" dest="submes" />
<copyField source="create" dest="submes" />
field 字段定义了solr展示的类型
name:字段名字
type:字段类型(如果是要进行查询的字段,类型为中文分词类型如:text_mmseg4j_complex)
indexed:true
stored:true
required:true
multiValued:查询字段设置为true ,其他为false
copyField : 拷贝需要索引的字段到整合字段中 submes是本列子中的整合字段 solr查询也是查询这个字段
这个字段可以根据多个字段进行权重设置,并且打分,排序
四.重启solr
discuz配置都已经更改完,现在需要重启生效:
./bin/solr restart
对于一些大的网站而言,重启整个solr回导致其他业务无法搜索,所以可以搞一个zookeep 来一个分布式 管理就可以了
五.使用
1.增量导入,在你的solr使用界面上左边下拉框找到discuz
下面出现的
Dataimport: 是执行增量全量导入的
query:搜索
analysis:分词
无法加载图片,根据很难形容,但是打开这个界面就知道了
2.搜索打分:有的时候我们除了想根据匹配度排序外,还想根据浏览量、创建时间、是否是vip等综合因素排序,
在curl请求时 请求参数要加上下面的值:
$params['defType'] = 'edismax' ;
$params['bf'] = "sum(linear(vip,1000,0),linear(sqrt(log(linear(views,1,2))),100,0),sqrt(log(create)))";
bf里面的参数是solr支持的打分标准的函数,具体使用参考http://mxsfengg.iteye.com/blog/352191 详解 很不完善,后续还会完善,如有问题随时提问
相关推荐
solr使用和原理 简单明了的介绍了solr的使用和原理,及其部署方式,适合初学者第一次部署
Solr(Cloudera)使用手册
solr使用教程结合taotao项目的search模块1
Solr 3.*pdf使用手册,欢迎下载
Solr的基础知识,笔者翻阅了很多网上的资料,自认为比较全面,涉及到Solr的安装使用与SolrJ的开发。
Solr使用指南,操作步骤很详细
solr的安装使用步骤
1.2.1 Solr使用Lucene并且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码结构 8 1.4.1 目录...
简单的描绘了使用easynet开发solr客户端,包括添加,修改,删除,查询功能。
1、环境要求 2、启动: 3、建立一个简单实例: 4、怎么进行搜索 1、导入smartcn的jar包 2、配置分词器 3、 效果 1、导入相关jar包 2、配置
solr中文解析器以及使用文档,配合blog使用
solr 使用官方指南,solr 使用官方指南solr 使用官方指南solr 使用官方指南
1.2.1 Solr使用Lucene并且进行了扩展 一个真正的拥有动态域(Dynamic Field)和唯一键(Unique Key)的数据模式(Data Schema) 对 Lucene 查询语言的强大扩展! 支持对结果进行动态的分组和过滤 高级的,可配置...
solr配置,部署,定时任务更新,数据源配置, solr_java 运用详解
lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用lucene,solr的使用
Solr安装配置 详细安装SOLR安装配置图片展示
lucene的应用.pdf 01solr企业级搜索引擎准备阶段.pdf 02solr企业级搜索引擎实战演练.pdf 适合新手搭建solr使用
Apache Solr 是一个开源的搜索服务器,Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。定制 Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述所有 Field 及其内容的 XML 文档就...
solr安装和使用