Solr实现站内搜索
作者:互联网
solr常用命令:
- solr start 启动solr单机版
- solr start -p 8984 指定端口启动
- solr restart 重启
- solr create/create_collection -c coreName 创建新core
- solr delete -c coreName 删除core
- solr stop -all 停止solr
- solr status 查看solr状态
- java -Dauto -Dc=gettingstarted -Drecursive=yes -jar example\exampledocs\post.jar docs/ 导入数据
使用:
- 进入solr的bin目录,solr start即可启动,默认使用8983端口。
- 使用solr create_collection -c coreName 创建一个core。
- 修改/server/solr/coreName/conf 内的managed-schema和solrconfig.xml文件,添加如下代码
managed-schema:配置中文分词
<field name="question_title" type="text_ik" indexed="true" stored="true" multiValued="true"/>
<field name="question_content" type="text_ik" indexed="true" stored="true" multiValued="true"/>
<fieldType name="text_ik" class="solr.TextField">
<!--索引时候的分词器-->
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart=“false"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<!--查询时候的分词器-->
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.util.IKTokenizerFactory" useSmart=“true"/>
</analyzer>
</fieldType>
solrconfig.xml:数据库导入数据的时候使用
<lib dir="${solr.install.dir:../../../..}/ext/ikanalyzer" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/ext/mysql" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-\d.*\.jar" />
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">solr-data-config.xml</str>
</lst>
</requestHandler>
再新建一个solr-data-config.xml文件,连接数据库使用
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/wenda?serverTimezone=UTC"
user="root"
password="w123456"/>
<document>
<entity name="question" query="select id,title,content from question">
<field column="content" name="question_content"/>
<field column="title" name="question_title"/>
</entity>
</document>
</dataConfig>
- 在solr根目录创建ext文件夹(自定义),然后在文件内放入ik_analyzer(自己编译的)和mysql-connector的jar包。
- 重启solr :solr restart -p 8983
- 使用Dataimport导入数据库数据
- 使用Query可以测试查询数据。
- 在Java中使用solr-solrj包来操作solr
solr原理:
- 先全文检索然后创建反向索引
- 全文检索:对文档内容进行分词,对分词后的结果创建索引,然后通过对索引进行搜索的方式叫做全文检索。
- Solr/Lucene采用的是一种反向索引,所谓反向索引:就是从关键字到文档的映射过程,保存这种映射这种信息的索引称为反向索引
-
全文检索过程:
- 去除停词和标点符号,例如英文的this,that等, 中文的”的”,”一”等没有特殊含义的词
- 会将所有的大写英文字母转换成小写,方便统一创建索引和搜索索引
- 将复数形式转为单数形式,比如students转为student,也是方便统一创建索引和搜索索引
-
搜索过程:
- 1.用户输入搜索条件
- 2.对搜索条件进行分词处理
- 3.根据分词的结果查找索引
- 4.根据索引找到文档ID列表
- 5.根据文档ID列表找到具体的文档,根据出现的频次等计算权重,最后将文档列表按照权重排序返回
标签:站内搜索,全文检索,实现,solr,索引,文档,创建,Solr,分词 来源: https://blog.csdn.net/wuud__/article/details/104060030