「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」
1.Solr服务与tomcat整合
tomcat安装运行环境
- Jdk:1.8及以上
- Solr:7.1
- Web服务器:tomcat 8(改端口8081,如果只有一个tomcat,可以不改,默认是8080;如果有多个tomcat,就需要改端口号,防止冲突;如果有一个tomcat配置了环境变量,其他的也需要配置才能使用,或者都不配置。)
整合
第一步:F:\solr\solr-7.1.0\server\solr-webapp\webapp路径下的内容,放入F:\solr\apache-tomcat-8.0.41\webapps下的solr文件夹里,(solr文件夹需要新建)。
第二步:F:\solr\solr-7.1.0\server\lib下的所有jar包,包括ext文件夹下的jar包,全部复制到F:\solr\apache-tomcat-8.0.41\webapps\solr\WEB-INF\lib路径下。
第三步: 将F:\solr\solr-7.1.0\server\resources下的log4j.properties文件放入F:\solr\apache-tomcat-8.0.41\webapps\solr\WEB-INF\路径下新建的classes文件夹里。 第四步:创建一个solr_home文件夹,用于配置与solr服务器想要响应的文件。 将F:\solr\solr-7.1.0下的contrib和dist文件夹以及F:\solr\solr-7.1.0\server\solr下的所有内容都复制到新建目录solr_home下。 在solr_home目录下,新建一个demo_core文件夹,用于在Slor页面中添加Core选择类,完成后续的设置搜索方式等功能。
注意:修改F:\solr\solr_home\demo_core\conf\solrconfig.xml文件
注意:修改F:\solr\apache-tomcat-8.0.41\webapps\solr\WEB-INF\中的web.xml文件
注释掉这部分内容
启动tomcat,进入Solr页面
访问http://localhost:8081/solr/index.html
导数据,配置中文分词器
将F:\solr\solr-7.1.0\contrib\analysis-extras\lucene-libs路径下的所有jar包和F:\solr\solr-7.1.0\dist路径下的两个包全部复制到F:\solr\apache-tomcat-8.0.41\webapps\solr\WEB-INF\lib文件夹下。
在F:\solr\solr_home\core_demo\conf路径下的managed-schema中加入中分分词器配置
<!-- ChineseAnalyzer -->
<fieldType name="solr_cnAnalyzer" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
</fieldType>
solrconfig.xml里添加requestHandler类型的配置,data-config.xml配置的是数据库连接相关信息、 SQL以及查询结果映射对应域中。
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
所以需要在统计目录下创建data-config.xml文件,映射文件对应属性就不一一介绍了
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/solr"
user="root"
password="root"/>
<document>
<!--entity里的name属性和自己数据库里的表名对应-->
<entity name="products" query="select pid,pname,catalog_name,price,description,picture from products ">
<field column="pid" name="id"/>
<field column="pname" name="prod_pname"/>
<field column="catalog_name" name="prod_catalog_name"/>
<field column="price" name="prod_price"/>
<field column="description" name="prod_description"/>
<field column="picture" name="prod_picture"/>
</entity>
</document>
</dataConfig>
启动服务,添加数据,查询演示。
查询语法: 1. q查询关键字,查询所有使用*:*。 多个条件可以:之间用 AND 或 OR 关联
2. fq (filter query)过滤查询,作用:在q查询符合结果中同时是fq查询符合的, 注:也可以在“q”查询条件中使用product_price:[1 TO 20]