一、定义
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎
二 、搭建服务:
参见 点击打开链接
三、创建任务
当你的环境以安装solr服务 后,按照自己想要实现的功能创建自己的solr 任务
距离 我想创建一个 testQuery
1.在solr目录下 执行:./bin/solr create -c testQuery (创建成功 会有一个成功提示的 ,到目前为止solr 里面已经有一个为某一个)
此时在solr/server/solr 下面出现 testQuery 目录
2.启动solr : ./bin/solr restart
3.testQuery 目录结构 :
主要修改 都在conf下面
conf 目录结构:
data-config.xml文件 是添加索引 表结构 的 ,当每次将数据库数据导入solr 时候需要按照这个文件定义的结构去导入
<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自身对这些字段的处理
schema.xml 是被 solrconfig.xml 加载或者调用的 ,负责设置 每次查询的展示字段 、负责设置关联查询、负责设置停止词 近义词 的 设置
<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="<span style="color: #ff6600;">text_mmseg4j_complex</span>" 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查询也是查询这个字段
这个字段可以根据多个字段进行权重设置,并且打分,排序
五.使用
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支持的打分标准的函数,具体使用参考点击打开链接详解 很不完善,后续还会完善,如有问题随时提问

2378

被折叠的 条评论
为什么被折叠?



