全文检索引擎Solr系列——Solr核心概念、配置文件

Document

Document是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的一条记录,可以包含一个或多个字段(Field),每个字段包含一个name和文本值。字段在被索引的同时可以存储在索引中,搜索时就能返回该字段的值,通常文档都应该包含一个能唯一表示该文档的id字段。例如:

1
2
3
4
5
6
7
8
<doc>
     <field name= "id" >company123</field>
     <field name= "companycity" >Atlanta</field>
     <field name= "companystate" >Georgia</field>
     <field name= "companyname" >Code Monkeys R Us, LLC</field>
     <field name= "companydescription" >we write lots of code</field>
     <field name= "lastmodified" > 2013 - 06 -01T15: 26 :37Z</field>
</doc>
Schema

Solr中的Schema类似于关系数据库中的表结构,它以schema.xml的文本形式存在在conf目录下,在添加文当到索引中时需要指定Schema,Schema文件主要包含三部分:字段(Field)、字段类型(FieldType)、唯一键(uniqueKey)

  • 字段类型(FieldType):用来定义添加到索引中的xml文件字段(Field)中的类型,如:int,String,date,
  • 字段(Field):添加到索引文件中时的字段名称
  • 唯一键(uniqueKey):uniqueKey是用来标识文档唯一性的一个字段(Feild),在更新和删除时用到

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<schema name= "example" version= "1.5" >
     <field name= "id" type= "string" indexed= "true" stored= "true" required= "true" multiValued= "false" />
     <field name= "title" type= "text_general" indexed= "true" stored= "true" multiValued= "true" />
 
     <uniqueKey>id</uniqueKey>
     <fieldType name= "string" class = "solr.StrField" sortMissingLast= "true" />
     <fieldType name= "text_general" class = "solr.TextField" positionIncrementGap= "100" >
           <analyzer type= "index" >
             <tokenizer class = "solr.StandardTokenizerFactory" />
             <filter class = "solr.StopFilterFactory" ignoreCase= "true" words= "stopwords.txt" />
             <!-- in this example, we will only use synonyms at query time
             <filter class = "solr.SynonymFilterFactory" synonyms= "index_synonyms.txt" ignoreCase= "true" expand= "false" />
             -->
             <filter class = "solr.LowerCaseFilterFactory" />
           </analyzer>
           <analyzer type= "query" >
             <tokenizer class = "solr.StandardTokenizerFactory" />
             <filter class = "solr.StopFilterFactory" ignoreCase= "true" words= "stopwords.txt" />
             <filter class = "solr.SynonymFilterFactory" synonyms= "synonyms.txt" ignoreCase= "true" expand= "true" />
             <filter class = "solr.LowerCaseFilterFactory" />
           </analyzer>
     </fieldType>
</schema>
Field

在Solr中,字段(Field)是构成Document的基本单元。对应于数据库表中的某一列。字段是包括了名称,类型以及对字段对应的值如何处理的一种元数据。比如:

<field name="name" type="text_general" indexed="true" stored="true"/>
  • Indexed:Indexed=true时,表示字段会加被Sorl处理加入到索引中,只有被索引的字段才能被搜索到。
  • Stored:Stored=true,字段值会以保存一份原始内容在在索引中,可以被搜索组件组件返回,考虑到性能问题,对于长文本就不适合存储在索引中。
Field Type

Solr中每个字段都有一个对应的字段类型,比如:float、long、double、date、text,Solr提供了丰富字段类型,同时,我们还可以自定义适合自己的数据类型,例如:

1
2
3
4
5
6
7
8
9
10
<!-- Ik 分词器 -->
  <fieldType name= "text_cn_stopword" class = "solr.TextField" >
      <analyzer type= "index" >
          <tokenizer class = "org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" useSmart= "false" />
      </analyzer>
      <analyzer type= "query" >
          <tokenizer class = "org.wltea.analyzer.lucene.IKAnalyzerSolrFactory" useSmart= "true" />
      </analyzer>
  </fieldType>
  <!-- Ik 分词器 -->
Solrconfig:

如果把Schema定义为Solr的Model的话,那么Solrconfig就是Solr的Configuration,它定义Solr如果处理索引、高亮、搜索等很多请求,同时还指定了缓存策略,用的比较多的元素包括:

  • 指定索引数据路径
1
2
3
4
5
6
<!--
Used to specify an alternate directory to hold all index data
other than the default ./data under the Solr home.
If replication is in use, this should match the replication configuration.
-->
<dataDir>${solr.data.dir:./solr/data}</dataDir>
  • 缓存参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<filterCache
   class = "solr.FastLRUCache"
   size= "512"
   initialSize= "512"
   autowarmCount= "0" />
 
<!-- queryResultCache caches results of searches - ordered lists of
      document ids (DocList) based on a query, a sort, and the range
      of documents requested.  -->
  <queryResultCache
   class = "solr.LRUCache"
   size= "512"
   initialSize= "512"
   autowarmCount= "0" />
 
  <!-- documentCache caches Lucene Document objects (the stored fields for each document).
    Since Lucene internal document ids are transient , this cache will not be autowarmed.  -->
  <documentCache
   class = "solr.LRUCache"
   size= "512"
   initialSize= "512"
   autowarmCount= "0" />
  • 请求处理器
    请求处理器用于接收HTTP请求,处理搜索后,返回响应结果的处理器。比如:query请求:
1
2
3
4
5
6
7
8
9
<!-- A request handler that returns indented JSON by default -->
<requestHandler name= "/query" class = "solr.SearchHandler" >
      <lst name= "defaults" >
        <str name= "echoParams" >explicit</str>
        <str name= "wt" >json</str>
        <str name= "indent" > true </str>
        <str name= "df" >text</str>
      </lst>
</requestHandler>

每个请求处理器包括一系列可配置的搜索参数,例如:wt,indent,df等等。

转自http://www.importnew.com/12770.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Solr是一个现成的全文检索引擎系统,可以通过将其放入Tomcat下来独立运行。通过使用SolrJ来调用Solr服务,企业可以实现对索引和文档的增删改查服务。将数据库的数据导入Solr索引库,并且可以通过Solr后台管理界面对索引进行CRUD、高亮、过滤、排序和分页等操作。使用Solrj可以实现索引的添加、更新和删除操作。Solr与Lucene的区别在于,Lucene是一个全文检索引擎工具包,而Solr是基于Lucene开发的一个全文检索引擎系统,可以独立运行并通过HTTP形式提供全文检索服务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [全文检索技术—Solr](https://blog.csdn.net/chuan129/article/details/80099292)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Lucene全文检索框架+Solr+ElasticSearch搜索引擎(Java高级必备.ES)](https://download.csdn.net/download/weixin_27064205/19677591)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值