您的位置:

ES分词结果查看:从多维度全面剖析

随着全球信息技术的飞速发展,搜索引擎的重要性越来越凸显。而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中如何查看分词结果的相关内容,希望对大家有所帮助。