solr搜索引擎_电商搜索(centos服务配置)

[b]前期认识[/b]
1.lucence:jar包 组成组件 它不是一套完整搜索引擎服务,他里面提供了很多
一些概念方面的抽象,是没有具体实现

2.solr是一种全文搜索引擎,是一套完整的企业级分布式搜索和搜索引擎
是一个企业级,电商平台全文搜索。
国内知名电商平台搜索各种数据 nosql,数据变化不大不像附近人在变,毕竟固定。

全文检索
命中表示
分页搜索
动态聚类
数据集成
富文本处理
高扩展

3.es(Elasticseach)是一种基于lucence的搜索引擎,他和solr区别在于,solr是对已有
各种数据的检索非常稳定高效,es主要是在做实时搜索,搜索的数据量可能随便
变化,他是比solr效率高
es像一些社交软件 随时搜索附近的人

[b]一.下载获取solr 构建我们自己solr搜索平台[/b]
[url]http://archive.apache.org/dist/lucene/solr[/url]
solr-4.10.3.zip windows
solr-4.10.3.tgz linux

[b]二.solr服务整体结构[/b]
[url]http://www.cnblogs.com/HD/p/3977799.html[/url]
[img]http://dl2.iteye.com/upload/attachment/0122/3765/a2aab0b9-f914-3727-87b5-21ec172902cb.png[/img]

[b]2.1 运行war[/b]
solr-4.10.3/example/webapps/solr.war 在tomcat下webapp运行启动war包,获取solr文件

[b]2.2 配置web.xml[/b]
回到tomcat的webapps目录下,记事本打开solr\WEB-INF\web.xml文件。
加入如下代码:在<web-app />节点内的最后。
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solr-entry/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
[img]http://dl2.iteye.com/upload/attachment/0123/5023/6d87c6cc-823e-30ae-a0fc-65594cf90863.png[/img]

[b]2.3 配置solrhome文件[/b]
solr-4.10.3\example\solr,复制所有内容到 [b]solr配置模块[/b] /usr/local/solr-entry/solrhome
[img]http://dl2.iteye.com/upload/attachment/0123/5035/bfc141d9-36ff-3ac4-98d8-faf0bcb0597c.png[/img]

[b]2.4 拷贝jar包[/b]
打开文件夹:solr-4.10.3\example\lib\ext,复制所有jar包到 [b]tomcat的solr项目下[/b] 的webapps\solr\WEB-INF\lib下。
[img]http://dl2.iteye.com/upload/attachment/0123/5037/3d65634e-da04-3960-8826-443a981e392a.png[/img]

[b]2.5 运行 solr服务平台[/b]
localhost:8081/solr/
[img]http://dl2.iteye.com/upload/attachment/0123/5039/8c47f306-154e-3b4f-8d4c-37bd9319ba58.png[/img]

[b]三.我们用solr分词(IKAnalyzer中文分词器)[/b]
分词前要有jar包支持:ik分词插件,
IKAnalyzer2012FF_u1.jar可扩展的插件
用来分词的工具包,这个工具包有支持lucene的接口,所以用它来做分词,分词汉语一句话根据主谓宾智能判断出来。

[b]3.1.IKAnalyzer2012FF_u1.jar 包放到 [b]tomcat的solr项目下[/b] tomcat/webaaps/solr/WEB-INF/lib/IKAnalyzer2012FF_u1.jar [/b] 注:IKAnalyzer2012_u6.jar或其他版本会有问题。
[img]http://dl2.iteye.com/upload/attachment/0123/5044/d1456d55-4e2b-3e94-a6f7-712a93c0b453.png[/img]

[b]3.2.检索配置文件[/b]
ex_stopword.dic 中文词库
IKAnalyzer.cfg.xml 扩展配置文件
mydict.dic 中文词语库
以上三个文件网上下载后放到如下路径
tomcat/webaaps/solr/WEB-INF/classes/
[img]http://dl2.iteye.com/upload/attachment/0123/5048/30a343a9-8958-3aad-a303-ef85346fbaf3.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0123/5050/cb48dd71-847e-362a-8b9c-144900a984ed.png[/img]

[b]3.3 配置solrhome配置模块,修改schema.xml文件[/b]
[img]http://dl2.iteye.com/upload/attachment/0123/5069/f7a34bc5-6ef1-35f1-bc71-2cfadec49e13.png[/img]
与其它分词器的配置大体相同,在<types></types>配置项间加一段如下配置:

<!-- 配置中文分词器fieldType TextField和lucene是不一样的 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

最后就可以使用text_ik了

<!-- 配置中文分词Field -->
<field name="hailong_name" type="text_ik" indexed="true" stored="true" />
<field name="product_name" type="text_ik" indexed="true" stored="true" />

另:solr默认分词器
    <!-- A general text field that has reasonable, generic
cross-language defaults: it tokenizes with StandardTokenizer,
removes stop words from case-insensitive "stopwords.txt"
(empty by default), and down cases. At query time only, it
also applies synonyms. -->
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

[img]http://dl2.iteye.com/upload/attachment/0123/5093/b56f64d3-1516-36a5-8952-1d8a7b136452.png[/img]
智能分词 像人一样智能判断一条语句的主谓宾
我喜欢白富美 =>我|喜欢|白|富|美
经常更新词库

大数据云计算:洞悉先机(每一个人的心里喜好都有被某知名电商平台分析过,只要是他们的会员)
大数据企业 索引(直接拥有)

[b]四.solr与电商[/b]
电商平台用solr全文检索 模块
[img]http://dl2.iteye.com/upload/attachment/0123/5127/f0d02028-054b-374a-a7d3-bf6787f948d3.png[/img]

简单介绍
a.简单检索
页面检索:
java solrj客户端检索
b.复杂检索
[b]简单检索:[/b]
Dataimport这个功能 将数据库solr的电商数据 全部solr索引到我们的真实数据库。
Dataimport功能各种类型的数据 映射 到我们的服务solr。
索引(直接拥有数据的地址)里面id,查询非常
数据库的数据不是存在solr服务里,
[b]4.1 建立映射[/b]
[b]4.1.1 添加jar包到tomcat的solr项目[/b]
solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar 引入到solr服务中:
[img]http://dl2.iteye.com/upload/attachment/0123/5120/2d70799e-bf3f-3071-87a2-ac29a2d56f2e.png[/img]
加入到apache-tomcat\webapps\solr\WEB-INF\lib

[b]4.1.2 配置solrconfig.xml(配置dataimport handler)[/b]

<!-- add by hailong 20170308 -->
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<!-- <str name="config">/usr/local/solr-entry/solrhome/conllection1/conf/mysql-data-config.xml</str>-->
<!-- 放在同一个目录下 -->
<str name="config">mysql-data-config.xml</str>
</lst>
</requestHandler>

以上代码配置加入到 /usr/local/solr-entry/solrhome/conllection1/conf/solrconfig.xml
添加位置根据自己的习惯,便于查找即可,我这里放到系统内置最后一个handler,replication之下。
注:solrconfig.xml 还需要mysql-connector-java-5.1.36.jar驱动包
[img]http://dl2.iteye.com/upload/attachment/0123/5571/21ffbb42-4a76-3262-894a-102fc57a067d.png[/img]

[b]4.1.3 添加mysql-data-config.xml文件(配置数据源)[/b]
添加mysql-data-config.xml文件,映射到数据库

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.92.129:3306/solr_test"
user="root"
password="123456"/>
<document>
<entity name="product" transformer="HTMLStripTransformer"
query="SELECT pid, product_name, catalog_name, product_price, product_description, product_picture FROM product">
<field column="pid" name="id" />
<field column="product_name" name="product_name" />
<field column="catalog_name" name="catalog_name" />
<field column="product_price" name="product_price" />
<field column="product_description" name="description" />
<field column="product_picture" name="product_picture" />
</entity>
</document>
</dataConfig>

dataSource节点配置:
name: dataSource的名称,配置文件可以有多个datasource,使用name区分。
type:数据源类型,如JDBC
driver:数据库驱动包,去提前放到lib目录下
url:数据库连接url
[b]<field>字段配置:
column:数据库查询列名称
name:Schema.xml中的字段
[/b]
文件位置:
[img]http://dl2.iteye.com/upload/attachment/0123/5565/45d05fb2-cba8-398d-a1f2-4bc129a7af20.png[/img]
column与name对应
[img]http://dl2.iteye.com/upload/attachment/0123/5866/a7d65abc-6643-3433-b783-24afbd14527f.png[/img]
注:product_name作为搜索字段,需要设定type="text_ik",不然做不到分词查询。

[b]4.1.4 修改schema.xml文件(配置数据源)[/b]
添加field name属性,此属性对应mysql-data-config.xml的<field name的值 :
[img]http://dl2.iteye.com/upload/attachment/0123/5868/53feecbf-5d32-3028-a8fc-17f9161636f3.png[/img]
[b]以上配置完成[/b]

[b]4.1.5 执行创建索引[/b]
再次启动solr:
启动成功,把mysql创建索引到doc文件:
[img]http://dl2.iteye.com/upload/attachment/0123/5860/51289a6e-4286-3146-9dce-c45fb4a9c6ad.png[/img]
查询doc:
[img]http://dl2.iteye.com/upload/attachment/0123/5862/1faa4d96-0930-3cbc-8342-2216accfdc18.png[/img]
取得的是mysql的数据:
[img]http://dl2.iteye.com/upload/attachment/0123/5864/02b826c3-a843-36b2-bb9e-3f9533b2a60a.png[/img]
以上配置完成,可以结合spring java代码实现电商plp商品列表加载solr索引信息了。

[b]4.1.6 配置solr日志[/b]
有些问题在tomcat无法打印出日志,不方便查出原因,配置solr日志,可查找solr出的问题:
在tomcat的solr工程下添加日志属性文件
[img]http://dl2.iteye.com/upload/attachment/0123/5794/e96bea40-6216-35a9-ad25-90d2d14b6a5d.png[/img]
#  Logging level
log4j.rootLogger=WARN, file

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=logs/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n


在tomcat/webapps/solr/WEB-INF/lib 下查看之前导入过的日志jar包:
[img]http://dl2.iteye.com/upload/attachment/0123/5796/7018a8de-5a30-3f1a-86e7-772ecf7bf214.png[/img]

运行后出现日志文件 tomcat/bin/logs/solr.log:
[img]http://dl2.iteye.com/upload/attachment/0123/5798/42e56981-b199-3e92-ab0f-6080b0f3ae08.png[/img]

可能出现错误:
org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id

在solr建立索引的时候,如果你提交的doc中没有 id 这个Field,结果Solr在建立索引时候出现如下错误:
org.apache.solr.common.SolrException: Document [null] missing required field: id

主要是因为Solr 的solrconfig配置文件中定义了<uniqueKey>id</uniqueKey>,默认了ID 是唯一的。
如果你的索引字段不需要ID,就可以把这个改掉.
<uniqueKey>kwid</uniqueKey> 

并将id字段里的required="true"属相,
添加到kwid字段。
<field name="pid" type="string" indexed="true" stored="true" required="true"/> 



其他细节:
组合域
多域组合查询
明细化控制
命中表示
动态聚类
富文本处理
数据集成

web应用使用solr总体思路: java服务器映射到solr服务(httpSolrServer),solr的web.xml映射到entry solrhome实体数据(实体配置模块),solr实体数据映射数据库。
电商中应用:分页,返回plp对象list,且设置好高亮显示。
参考:
属性定义[url]http://www.cnblogs.com/rainbowzc/p/3695058.html[/url]
结合solr服务实现搜索引擎的java代码
[url]http://572327713.iteye.com/blog/2360936[/url]
[url]http://www.cnblogs.com/easong/p/6258280.html[/url]
[url]http://www.w2bc.com/article/204862[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值