分析阶段
在两个时间需要用到分析。在索引时,当一个字段被创建时,分析这个字段得到的 token stream 将被加入索引库,并且定义出这个字段的 terms(包括位置、大小等等)。在查询时,搜索词将被分析,并且去字段的索引中匹配相应的 terms。
在许多情况下,同样的分析会被应用在两个阶段,比如精准搜索,需要索引和搜索时采用同样的分析策略。在其他情况下,索引和搜索所采用的策略会有所不同。
如果字段类型只是简单定义了 <analyzer> ,这样相同的分析策略会被应用到索引和搜索阶段。如果打算搜索和索引采用不同的分析策略,字段类型定义中需要包含两个 <analyzer> ,如下所示:
<br /> <fieldType name="nametext"><br /> <analyzer *type="index"{*}><br /> <tokenizer/><br /> <filter/><br /> <filter words="keepwords.txt"/><br /> <filter synonyms="syns.txt"/><br /> </analyzer><br /> <analyzer *type="query"{*}><br /> <tokenizer/><br /> <filter/><br /> </analyzer><br /> </fieldType><br />
在上面例子中,在索引时,文本内容将被转成小写,不存在keepwords.txt中的文本将被丢弃,剩下的将被替换syns.txt中的同义词。
在搜索时,会将搜索词转成小写,索引阶段的过滤和映射步骤搜索时没有定义,就不会发生。