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(AddUpdateCommand cmd)方法里面的两行代码如下:
 synchronized (this) {
        // adding document -- prep writer
        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上。

 

你可能感兴趣的:(Solr)