Solr 分词器(analyzer)是怎么传到Luence的
(2011-11-02 17:41:48)
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上。
分享到:
相关推荐
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。 采用了特有的“正向迭代最细粒度切分算法”,具有60万字/秒的高速处理能力。 采用了多子处理器分析模式,支持:英文字母(IP地址、Email、...
3. 文档分析器(Analyzer):结合分词器和过滤器,根据特定语言规则对文档进行分析。 4. 倒排索引(Inverted Index):Lucene的核心数据结构,将每个单词映射到包含该单词的文档列表,便于快速查找。 二、Lucene的...
5. Searcher:搜索器是执行查询的核心,它可以是IndexSearcher(针对单个索引)或MultiSearcher(针对多个索引)。 三、Lucene的查询处理 Lucene支持多种查询语法,如布尔查询、短语查询、范围查询等。查询过程...
Lucene支持多种分词器,如StandardAnalyzer、IKAnalyzer等,选择合适的分词器对提高搜索精度至关重要。 3. **创建索引**:使用Lucene的`IndexWriter`类,将预处理后的数据转换为Lucene的文档(Document)对象,并...
在实际的搜索引擎开发中,Lucene 可以作为基础框架,结合其他技术如 Nutch(用于网络爬虫)和 Solr(提供更高级的搜索服务,如多字段搜索、分页、高亮显示等)来构建一个完整的搜索引擎系统。`Indexer` 和 `Searcher...
索引过程包括分析(Analyzer)文本、分词(Tokenization)、建立倒排索引(Inverted Index)等步骤。 - **文档(Document)**: Lucene中的文档相当于存储信息的基本单元,可以包含多个字段(Field),每个字段有...