垂直搜索引擎五》索引与检索模块的设计与实现

该模块采用Lucene和Solr进行文本数据的倒排索引和检索。Lucene服务包括文本的写入和读出,Solr则提供了基于Lucene的Web查询服务,支持多种数据导入和查询方式。用户可以选择使用Lucene或Solr进行服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.3索引与检索模块的设计与实现

4.3.1 索引与检索模块的流程。

索引与检索模块主要是负责对文本数据进行倒排索引和检索,本系统采用了Lucene和Solr并用作为服务端。用户可以根据传入的参数进行选择使用Lucene或者是Solr进行服务。其流程图4-13所示:

 

 

图4-13  索引与检索模块流程

 

4.3.2索引与检索模块之Lucene服务

(1)工作方式:lucene提供的服务实际包含两部分:一入一出。所谓入是写入,就是已经有了一段文本信息,然后放进Lucene提供的写入接口,Lucene会自动根据一定的规则或者用户自定义的规则进行分词。出就是读出,根据关键词查找索引库中对应的文本,然后返回结果出来。

(2)写入过程: 文本首先通过分析处理,包括:分词,单词。信息的来源需要添加每个字段的文档,需要索引字段索引,存储需要存储。索引写入内存,内存可以内存或磁盘。

(3)读出流程:用户提供搜索关键词,经过analyzer处理。

(4)核心索引代码示例:

 

IndexWriter writer = new IndexWriter(“/data/index/”, new StandardAnalyzer(), true);
Document doc = new Document();
doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.TOKENIZED));
doc.add(new Field("content", "lucene works well", Field.Store.YES, Field.Index.TOKENIZED));
writer.addDocument(doc);
writer.optimize();
writer.close();
 

 

 

核心查询代码示例:

 

public   class TestQuery  {   
    public   static   void  main(String[] args)  throws IOException, ParseException  {   
        Hits hits =   null ;   
        String queryString =   " 中黄57 ";   
        Query query =   null ;   
        IndexSearcher searcher =   new  IndexSearcher( " c:\\index " );   
  
        Analyzer analyzer =   new  StandardAnalyzer();   
        try   {   
            QueryParser qp =   new  QueryParser( " body ", analyzer);   
            query =  qp.parse(queryString);   
        }  catch  (ParseException e)  {   
        }   
        if  (searcher  !=   null )  {   
            hits =  searcher.search(query);   
            if  (hits.length()  >   0 )  {   
                System.out.println(" 找到: "  +  hits.length()  +   "  个结果! " );   
            }   
        }   
    }  
 

 

4.3.2索引与检索模块之Solr服务

(1)工作方式:Solr提供服务是基于Lucene,它良好的Lucene API封装,有自己的网页显示的方式。Solr Web能够管理和查询,这是基于远程代理模型实现查询。也就是说,我们可以通过HTTP查询请求的形式Solr服务器根据参数使用get请求检索自己的文本库,并返回结果。它返回的结果与多个输出方法(包括XML / XSLT和JSON格式)。

(2)多核配置Solr.xml: 

 

<coresadminPath="/admin/cores" defaultCoreName="core0">
    <core name="core0"instanceDir="core0" />
     <core name="core1"instanceDir="core1" />
  </cores>
 

 

自定义业务Scame:

 

 

图4-14  自定义业务

 

IK分词的配置:

 

<fieldTypename="text" class="solr.TextField"autoGeneratePhraseQueries="false">
       <analyzerclass="org.wltea.analyzer.lucene.IKAnalyzer"/>                         
</fieldType>


(4)索引方式:

 

可以使用DIH(DataImportHandler)从数据库导入数据

支持CSV文件导入,因此Excel数据也能轻松导入

支持JSON格式文档

二进制文档比如:Word、PDF

还能以编程的方式来自定义导入

查询示例:

如下图:

 

 

图4-15  solr查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值