@tsihedeyo
2014-08-04T20:31:34.000000Z
字数 1445
阅读 2470
solr_in_action
chapter_6
翻译
本章包括
- Solr的分析表单猜测是
- 自定义字段类型,进行进阶文本分析
- 利用Solr的Plug-In框架扩展文本分析
第五章中,我们Solr索引如何工作,以及在schema.xml中定义了非文本字段。本章学习文本分析。
文本分析可支持自然语言的同义词,你不会希望你的用户需要执行类似这样的查询buying house OR purchase home OR buying a home OR purchasing a house
。
本章重点分析Solr的以下几个文本分析组件:
- Solr文本分析的基本组件,
analyzer, tokenizer, and chain
of token filters- 自定义字段类型以支持构建索引以及查询时候的文本分析
- 基本的文本分析方法,如去掉
removing stop words, lowercasing,
。
removing accents, synonym expansion, and stemming
我们使用了Tweets数据,这给我们的分析带来了一些挑战,包括:
- 合并过多的字符重复,如
yummm
- 处理
#hashtags
以及@mentions
- Use a custom token filter to resolve shortened bit.ly-style URLs
以下是我们需要分析的样例数据:
`#Yummm :) Drinking a latte at Caffé Grecco in SF's historic North Beach... Learning text analysis with #SolrInAction by @ManningBooks on my i-Pad`
之前已经说过,文本分析的主要目的就是让用户不需要考虑列举他们搜索的字段的所有可能同义词。图6.1用户搜索了San Francisco north beach coffee
,显然是希望找到San Francisco north beach的好coffee店主。
图6.1 第五章的示例web搜素框
!图 6.1
虽然对于我们的样例数据来说并没有对San Francisco, north beach, and coffee
并没有绝对精准出现,但是样例应该还是一个完美匹配。之所以认为是完美匹配原因如下表6.1
表6.1 样例匹配表
用户搜索 | 文档内容 |
---|---|
San Francisco | SF’s |
north beach | North Beach |
Coffee | latte, Caffé |
所以我们要做的就是把文档内容转成内容以匹配的形式。图6.2显示了Solr的文本分析框架进行的转换,现在你可以把它想成一个黑盒,稍后我再深入了解。
图6.2 Tweet文本被转换成更容易搜索的形式。每个Box表示一个词,词中间的空格表示被去除的stop words
!图6.2
表6.2展示了其中涉及到的转换,虽然单个词的转换非常小,但是合在一起就对用户体验有很大的改进。
表6.2 Solr内置分析框架做的文本转换
!表6.2
Solr的ASCIIFoldingFilterFactory
可将caffé
转成caffe
,WordDelimiterFilterFactory
将i-Pad
处理为两个索引项目ipad
,i pad
。
PatternReplaceCharFilterFactory
支持正则匹配替换,如yummm
替换成yumm
。
以上这些转换都是Solr内置的,无需在scheml.xml中进行配置。