solr基本概念

原文:http://www.solrtutorial.com/basic-solr-concepts.html

 

Indexing(索引)

solr有快速显示搜索结果的能力。因为solr不是直接去搜索文本,而是搜索索引。

这个原理就类似想通过某个关键字找到书的某一页都是通过书的索引来查找,而不是每页去匹配这个单词。

solr的这种索引叫倒排序(inverted index),因为他把以为page为中心模型反转了(page-->word),变成了单词为中心的模型(word-->pages)

How Solr represents data

Index由一个或则多个Documents组成,一个Documents包含一个或多个Fields

用数据库术语,一个Document对应一个表,一个Fields对应一个表字段。

Schema

当你添加Document到Solr之前需要先定义Schema,通过schema.xml表示。schema定义了:1.有多少种fields。2.那些field应该使用unique/primary key。3.那些required是必填的。4.如何索引和查询field。

Field Types

在Solr每个field都有类型。Solr扩充了lucene中的各种field type。包括:

  1. float
  2. long
  3. double
  4. date
  5. text

Solr也允许你自定义类型,通过组合filters和tokenizers,一个例子:

<fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" >
  <analyzer>
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/>
  </analyzer>
</fieldtype>

定义字段Defining a field

<field name="id" type="text" indexed="true" stored="true" multiValued="true"/>

Analysis

当数据被添加到Solr,都会经过各种转换,这个过程叫Analysis阶段。一些常见的转换,比如:转换为小写字母,去掉stop word等等,analysis的结果是一组tokens,然后再被添加为索引。Tokens已经不是原始的文档,是在你执行搜索查询时被搜索的。

如果一个filed没有设置indexed,那么他将不能被搜索,那有何用处?

Term Storage

当我们把搜索结果显示给用户时候,用户期望看到的是原始的文档,而不是经过analysis后的token。所以这就是Storage的目录,告诉solr把原始数据也保存下来。

有时候有些filed不需要被查询,但是需要在结果中显示,可以通过在shcema中设置filed的属性stored=true and indexed=false.

好的,那我们把所有filed都保存下来不是更好?

但是保存这些会增大solr索引文件的大小,索引越大,查询越慢( the larger the index, the slower the search)

猜你喜欢

转载自san-yun.iteye.com/blog/2009413
今日推荐