搜索引擎的原理:
1、查询分析(自然语言处理)理解用户需求
2、分词技术
3、关键词搜索匹配
4、搜索排序
lucence
Lucene 是一个成熟的权威检索库
Elasticsearch 的搜索原理简单过程是,索引系统通过扫描文章中的每一个词,对其创建索引,指明在文章中出现的次数和位置,当用户查询时,索引系统就会根据事先的索引进行查找,并将查找的结果反馈给用户的检索方式。
倒排索引技术
数据结构,主要作用是从文档中提取关键词,并建立关键词到文档的映射关系。
在倒排索引中,每个关键词都关联着包含该关键词的文档列表,这使得搜索操作能够迅速定位包含特定关键词的文档,从而大幅提高查询效率。
- 词典(Dictionary):包含所有在文档集中出现的关键词。
- 倒排列表(Inverted List):对于每个关键词,记录包含该关键词的文档ID列表及其在文档中的位置信息。
倒排索引的步骤:
词条化(Tokenization):将文档拆分为单词,并进行规范化处理(如转小写、去除停用词等)。
建立词典:提取所有文档中的唯一单词。
创建倒排列表:记录每个单词在各个文档中的出现位置。
分词器
Elasticsearch是一个流行的搜索引擎库,它使用了一种基于Lucene的全文搜索引擎。在其内置的分词器中,有几种标准的选择:
-
标准分词器 (StandardTokenizer):这是
默认的分词器
,适用于大多数英语文本。它将连续的字母字符视为单词
,并处理标点符号、数字和特殊字符
。它会根据空格、换行符等进行分割。 -
雪崩分词器 (SnowballAnalyzer):基于Lucene的Snowball算法,用于对英文进行更复杂的词形还原(Stemming),即将单词的不同形式归并为其基本形式,比如"running"会被转化为"run"。
-
拼音分词器 (PhoneticTokenFilter):针对汉字拼音,将其转换成一种标准化的拼音表示,以便于搜索。
-
IK分词器:虽然不是Elasticsearch的标准,但IK Analyzer是一种广泛使用的第三方插件,支持更多的中文分词规则,包括全拼、简拼、词组分词等。
-
自定义分词器:用户还可以创建自定义的tokenizer和filter,根据特定场景的需求来进行词元的划分和处理。
每种分词器都有其适用的文本类型和场景,选择合适的分词器能提高搜索效果。使用analyzer
属性可以在索引文档时指定使用哪种分词器。