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列表找到具体的文档,根据出现的频次等计算权重,最后将文档列表按照权重排序返回
 
 
 
 
 
 
 
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章