项目需求使用 搜索引擎,在学习了 Solr 后,又自行研究了 ElasticSearch 的简单使用
Solr 的使用,在此不多做介绍,以下为个人认为的知识点 记录。根据此文并不能一步步搭建搜索引擎,如果需要,请移步公司大神的记录篇 laravel Solr的使用
搜索引擎接触依赖都是ElasticSearch 和 Solr 的比较和使用。
ElasticSearch
ES 的使用比较简单,部署 java环境,部署tomcat,数据索引的 导入,新增,删除,修改,都可以根据代码实现。
根据需求进行分页的修改,进行搜索结果字段的设置(也是索引导入内容的设置)。
Solr 配置的几个要点。
Solr 下载好需要下载多个必要的 jar包,如 mysql jar包,ik分词jar 包,solr 放在tomcat 的 webapps 下,
数据索引的 导入,新增,删除,修改,亦是根据代码实现。
solr-config.xml 里新增 导入 的操作配置。
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
managed-schema 里设置搜索的字段 及 分词的设置
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
web.xml
设置solr 配置的路径。
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:/phpStudy/WWW/solr-7.4.0/solr_home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
catalina.bat 配置 日志路径
:gotJsseOpts
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS%"
set "JAVA_OPTS=%JAVA_OPTS% -Dsolr.log.dir=D:/phpStudy/WWW/solr-7.4.0/solr_home/logs"
data-config.xml 配置 SQL 规则。
<dataConfig>
<dataSource convertType="true" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/db_name"
user="root"
password="password"/>
<document>
<entity name="products"
query="SELECT
p.id,
s.id as sid,
p.`name`,
p.`shop_id`,
c1.`name` AS first_cat_name,
c2.`name` AS second_cat_name,
c3.`name` AS third_cat_name,
b.`name` AS brand,
b.`logo` AS brand_logo,
s.price,
s.sale_price,
s.attributes,
p.cover_image
FROM
products p,
product_categories c1,
product_categories c2,
product_categories c3,
product_brands b,
product_skus s
WHERE
p.brand_id = b.id
AND p.product_type=1
AND s.product_id = p.id
AND p.first_cat = c1.id
AND p.second_cat = c2.id
AND p.third_cat = c3.id
ORDER BY
p.id DESC">
<field column='id' name='id' />
<field column='sid' name='sid' />
<field column='name' name='name' />
<field column='shop_id' name='shop_id' />
<field column='brand' name='brand' />
<field column='brand_logo' name='brand_logo' />
<field column='first_cat_name' name='first_cat_name' />
<field column='second_cat_name' name='second_cat_name' />
<field column='third_cat_name' name='third_cat_name' />
<field column='price' name='price' />
<field column='sale_price' name='sale_price' />
<field column='attributes' name='attributes' />
<field column='cover_image' name='cover_image' />
</entity>
</document>
</dataConfig>
在 laravel 使用 “solarium/solarium”: “^4.0” 插件。
搜索controller 里引入 插件
use Solarium\Client;
$options = [
'endpoint' => [
'localhost' => [
'host' => '127.0.0.1', //IP地址
'port' => 8983, //端口号
'core' => null,
'path' => '/solr/new_core',
'wt'=>'json',
],
],
];
感觉Solr 在设置搜索信息的时候,要优于elasticsearch.