随着全球信息技术的飞速发展,搜索引擎的重要性越来越凸显。而Elasticsearch (ES)已经成为如今世界上最流行的开源搜索引擎之一。在这个高度竞争的市场中,如何在海量数据中快速查找到所需信息已经成为关注的重点。而对于搜索引擎来说,分词器是其中一环非常重要的组成部分。本文从多个角度探讨如何使用ES查看分词结果。
一、es查看分词器
分词器是ES用于分解文本并将其转换为可索引词条的算法。ES提供了一些内置分词器,还有很多可用于不同语言或情况的第三方分词器。可以使用_mappings API查看当前索引的所有分词器。
GET /_mappings
额外的,也可以使用_settings API查看当前分词器的设置:
GET /_settings
使用above API可以很容易地查看到当前索引中使用哪些分词器。
二、es查看分词器列表
ES中内置的分词器有:Standard、Simple、Whitespace、Language、Stop、Keyword、Pattern、Fingerprint。多数情况下,Standard(默认)分词器已经足够使用,但对于一些特殊的需求,比如中文分词,需要选择合适的第三方分词器。比如,对于中文文本,默认的Standard分词器无法完整的将汉字切成单个的词语,一个中文词就会被切分成多个和上下文不自然的词语。ES中提供了一些常用的中文分词器,例如IKAnalyzer、smartcn、jieba等。
可以使用_analyze API来测试分词器在某些文本上的分词效果。例如测试中文分词器:
POST /_analyze { "analyzer": "ik_smart", "text": "中国是一个伟大的国家" }
执行完以上代码后,返回结果如下:
{ "tokens" : [ { "token" : "中国", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD" }, { "token" : "是", "start_offset" : 2, "end_offset" : 3, "type" : "CN_WORD" }, { "token" : "一个", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD" }, { "token" : "伟大", "start_offset" : 6, "end_offset" : 8, "type" : "CN_WORD" }, { "token" : "的", "start_offset" : 8, "end_offset" : 9, "type" : "CN_WORD" }, { "token" : "国家", "start_offset" : 9, "end_offset" : 11, "type" : "CN_WORD" } ] }
三、es查看分词效果
分词器对于搜索引擎的关键性作用已经是任谁都清楚的了。而查看分词结果也是非常关键的一个步骤。了解分词器在真实数据上的实际效果有助于我们选择合适的分词器,提高搜索效果。下面让我们来看一个实际案例:
假设我们要对下面的文本进行分词:
The quick brown fox jumps over the lazy dog.
如果使用默认的Standard分词器,那么其分词结果如下:
{ "tokens": [ { "token": "the", "start_offset": 0, "end_offset": 3, "type": "" }, { "token": "quick", "start_offset": 4, "end_offset": 9, "type": " " }, { "token": "brown", "start_offset": 10, "end_offset": 15, "type": " " }, { "token": "fox", "start_offset": 16, "end_offset": 19, "type": " " }, { "token": "jumps", "start_offset": 20, "end_offset": 25, "type": " " }, { "token": "over", "start_offset": 26, "end_offset": 30, "type": " " }, { "token": "the", "start_offset": 31, "end_offset": 34, "type": " " }, { "token": "lazy", "start_offset": 35, "end_offset": 39, "type": " " }, { "token": "dog", "start_offset": 40, "end_offset": 43, "type": " " } ] }
我们可以看到,该分词结果只是简单地将英文字符串分割成单词,但对于短语和多词的分词却比较弱。此时,我们可以选择其他分词器来查看其效果。例如使用Whitespace分词器:
POST /_analyze { "analyzer": "whitespace", "text": "The quick brown fox jumps over the lazy dog." }
该分词器分词结果如下:
{ "tokens": [ { "token": "The", "start_offset": 0, "end_offset": 3, "type": "word" }, { "token": "quick", "start_offset": 4, "end_offset": 9, "type": "word" }, { "token": "brown", "start_offset": 10, "end_offset": 15, "type": "word" }, { "token": "fox", "start_offset": 16, "end_offset": 19, "type": "word" }, { "token": "jumps", "start_offset": 20, "end_offset": 25, "type": "word" }, { "token": "over", "start_offset": 26, "end_offset": 30, "type": "word" }, { "token": "the", "start_offset": 31, "end_offset": 34, "type": "word" }, { "token": "lazy", "start_offset": 35, "end_offset": 39, "type": "word" }, { "token": "dog.", "start_offset": 40, "end_offset": 44, "type": "word" } ] }
从上述结果中,我们可以看出,使用Whitespace分词器将原始文本按照空格进行分词,分词后的单词中保留了英文句点(".")。
四、查看es分词器
对于ES默认提供的分词器,可以使用以下命令进行查看:
GET _cat/indices?v&h=index,creation.date.string,uuid,p
以上命令将会返回索引的列表和其中使用的Primary Shard数量,如果想在此列表中查看分词器,切换到该索引,可以使用_mappings API或_settings API来查看。而对于已经本地安装的一些第三方分词器,我们可以从GitHub上寻找并安装使用。
五、结果检索与高亮
分词器不仅可以将文本分解成词汇,搜索引擎也需要通过搜索查询的文本来匹配索引中的文本内容,然后返回最相关的结果。在这个过程中,允许我们使用一些高级功能,比如自定义查询、规则匹配、摘要摘录或者是高亮等。ES提供的强大搜索API允许我们实现高级搜索和精确匹配。本文不再对此进行详细介绍,大家可以自行学习。
六、总结
在ES搜索引擎中,分词器是其中非常重要的一个组成部分。在进行搜索之前,了解分词器的设置,查看分词器的类型、效果可以帮助我们优化搜索结果,更好地匹配查询文本。本文从查看分词器、分词器列表、分词效果、结果检索与高亮等多个角度探讨了ES中如何查看分词结果的相关内容,希望对大家有所帮助。