Solr 分词器(analyzer)是怎么传到Luence的

Solr 分词器(analyzer)是怎么传到Luence的

 (2011-11-02 17:41:48)
标签: 

solr

 

分词器

 

luence

 

it

分类: 架构与开发
Solr的分词器我们都知道,是配置在schema.xml配置文件中,不同的fieldType我们都可以给他配置分词器。Solr有两个地方分别是创建索引(INDEX)和查询(query),通过Solr的源码如下:

if(queryAnalyzer==null)queryAnalyzer=analyzer;

if(analyzer==null)analyzer=queryAnalyzer;

if(analyzer!=null){

ft.setAnalyzer(analyzer);

ft.setQueryAnalyzer(queryAnalyzer);

}

queryAnalyzer为查询时用到的分词器,analyzer为建索引时用到的分词器。从上面可以看出,如果我们没有配查询的分词器,则用创建的分词器,同理,如果创建时的分词器为空,则用查询的分词器。如果两个都为空,就是没有分词器了。

注意,这里的analyzer和queryAnalyzer都是TokenizerChain,里面包含了一个分词器的链。

主要问题是,Solr是在什么时候用到这些分词器的呢,通过调试,发现,Solr是在DirectUpdateHandler2的addDoc(AddUpdateCommandcmd)方法里面的两行代码如下:

synchronized(this){

//addingdocument--prepwriter

openWriter();

tracker.addedDocument(cmd.commitWithin);

}//end

addDoc方法是我们新建索引时调用的。openWriter是打开indexWriter,这里会判断indexWriter是否为空,如果为空则会创建一个createMainIndexWriter实例,代码如下:

if(writer==null){

writer=createMainIndexWriter("DirectUpdateHandler2",false);//这里就是new一个SolrIndexWriter实例

}

createMainIndexWriter方法就是new一个SolrIndexWriter实例,会传一个schema给SolrIndexWriter通过构造函数。

SolrIndexWriter继承luence的IndexWriter,创建indexWriter时会把schema的analyzer传给IndexWriterConfig。

这样luence的indexWriter就分词器就保存在IndexWriterConfig上。

相关推荐