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

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

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

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

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

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

二.solr服务整体结构
http://www.cnblogs.com/HD/p/3977799.html


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

2.2 配置web.xml
回到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>


2.3 配置solrhome文件
solr-4.10.3\example\solr,复制所有内容到 solr配置模块 /usr/local/solr-entry/solrhome


2.4 拷贝jar包
打开文件夹:solr-4.10.3\example\lib\ext,复制所有jar包到 tomcat的solr项目下 的webapps\solr\WEB-INF\lib下。


2.5 运行 solr服务平台
localhost:8081/solr/


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

3.1.IKAnalyzer2012FF_u1.jar 包放到 [b]tomcat的solr项目下 tomcat/webaaps/solr/WEB-INF/lib/IKAnalyzer2012FF_u1.jar [/b] 注:IKAnalyzer2012_u6.jar或其他版本会有问题。


3.2.检索配置文件
ex_stopword.dic 中文词库
IKAnalyzer.cfg.xml 扩展配置文件
mydict.dic 中文词语库
以上三个文件网上下载后放到如下路径
tomcat/webaaps/solr/WEB-INF/classes/



3.3 配置solrhome配置模块,修改schema.xml文件

与其它分词器的配置大体相同,在<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>


智能分词 像人一样智能判断一条语句的主谓宾
我喜欢白富美 =>我|喜欢|白|富|美
经常更新词库

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

四.solr与电商
电商平台用solr全文检索 模块


简单介绍
a.简单检索
页面检索:
java solrj客户端检索
b.复杂检索
简单检索:
Dataimport这个功能 将数据库solr的电商数据 全部solr索引到我们的真实数据库。
Dataimport功能各种类型的数据 映射 到我们的服务solr。
索引(直接拥有数据的地址)里面id,查询非常
数据库的数据不是存在solr服务里,
4.1 建立映射
4.1.1 添加jar包到tomcat的solr项目
solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar 引入到solr服务中:

加入到apache-tomcat\webapps\solr\WEB-INF\lib

4.1.2 配置solrconfig.xml(配置dataimport handler)
<!-- 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驱动包


4.1.3 添加mysql-data-config.xml文件(配置数据源)
添加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
<field>字段配置:
column:数据库查询列名称
name:Schema.xml中的字段

文件位置:

column与name对应

注:product_name作为搜索字段,需要设定type="text_ik",不然做不到分词查询。

4.1.4 修改schema.xml文件(配置数据源)
添加field name属性,此属性对应mysql-data-config.xml的<field name的值 :

以上配置完成

4.1.5 执行创建索引
再次启动solr:
启动成功,把mysql创建索引到doc文件:

查询doc:

取得的是mysql的数据:

以上配置完成,可以结合spring java代码实现电商plp商品列表加载solr索引信息了。

4.1.6 配置solr日志
有些问题在tomcat无法打印出日志,不方便查出原因,配置solr日志,可查找solr出的问题:
在tomcat的solr工程下添加日志属性文件

#  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包:


运行后出现日志文件 tomcat/bin/logs/solr.log:


可能出现错误:
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,且设置好高亮显示。
参考:
属性定义 http://www.cnblogs.com/rainbowzc/p/3695058.html
结合solr服务实现搜索引擎的java代码
http://572327713.iteye.com/blog/2360936
http://www.cnblogs.com/easong/p/6258280.html
http://www.w2bc.com/article/204862

猜你喜欢

转载自572327713.iteye.com/blog/2347725