栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

elasticSearch之索引模块

elasticSearch之索引模块

elasticSearch介绍与使用_陈海龙的格物之路-CSDN博客首先一起了解elasticSearch,然后结合springData,看看如何使用elasticSearch。https://blog.csdn.net/chl87783255/article/details/120830202

前言

通过上篇文章的介绍后,已经了解elasticSearch可以作为搜索引擎, 提供快速的搜索能力。为什么elasticSearch具有这种能力呢?

因为内部使用了索引。接下来,这篇文章将对索引进行介绍。

索引分析模块

首先要介绍的是index analysis module,索引分析模块,它用于注册分析器。

分析器将String field转化为多个分词,然后添加到反向索引中,以便进行文档搜索。

分析器是如何构成的?

字符过滤器接收原始文本并视为字符流,通过添加、删除、改变字符的方式对字符流进行转换。一个分析器可以有多个字符过滤器。
分词器

接收字符流,进行分词,输出分词流。例如空格分词器,利用空格对文本进行分词。

记录每个分词的顺序、位置,原始词的首尾偏移量。

一个分析器只有一个分词器。
分词过滤器接收分词流,对分词进行添加、删除、修改。例如小写分词过滤器、连接词分词过滤器。一个分析器可有多个分词过滤器

如何支持文本field进行全文搜索呢?

这就需要text analysis了。文本分析作用在于对非结构化的文本进行结构化转换,以便es进行全文

搜索,返回相关性结果,而不是绝对匹配的结果。

何时需要进行text analysis?

索引内有text field且需要进行文本搜索。

文本分析发生在什么情况呢?

文本分析发生在两个地方:

  • 对文档进行索引时,text field value会被分析。此时称为索引分析器。
  • 对text field进行全文搜索时,用户提供的搜索文本会被分析。此时称为搜索分析器。

这两种情况称为index and search analysis。

一般情况下,创建索引时和全文搜索时使用同一个分析器,确保进行分词匹配前使用同一套分析规则。

可以自定义分析器吗?

es提供了内置的分析器、字符过滤器、分词器、分词过滤器,同时支持自定义这些组件。

自定义分析器涉及的配置项:

type内置的分析器类型或自定义customBuilt-in analyzer reference | Elasticsearch Guide [7.15] | Elastic
tokenizer内置或自定义的分词器Tokenizer reference | Elasticsearch Guide [7.15] | Elastic
char_filter内置或自定义字符过滤器组成的数组Character filters reference | Elasticsearch Guide [7.15] | Elastic
filter内置或自定义分词过滤器组成的数组

举例说明

// 使用内置组件
{
  "settings": {
    "analysis": {
      "analyzer": {
// 自定义分析器名字
        "my_custom_analyzer": {
// 自定义分析器的组件配置
          "type": "custom", 
          "tokenizer": "standard",
          "char_filter": [
            "html_strip"
          ],
          "filter": [
            "lowercase",
            "asciifolding"
          ]
        }
      }
    }
  }
}


// 自定义组件
{
  "settings": {
    "analysis": {
      "analyzer": {
// 自定义分析器名字
        "my_custom_analyzer": { 
          "char_filter": [
            "emoticons"
          ],
          "tokenizer": "punctuation",
          "filter": [
            "lowercase",
            "english_stop"
          ]
        }
      },
      "tokenizer": {
// 自定义分词器名称
        "punctuation": { 
          "type": "pattern",
          "pattern": "[ .,!?]"
        }
      },
      "char_filter": {
// 自定义字符过滤器名称
        "emoticons": { 
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      "filter": {
// 自定义分词过滤器名称
        "english_stop": { 
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
  }
}

如何更好的支持中文场景呢?

有一个问题,需要搜索的文本时中文时,内置分析器的表现不符合预期,分词效果不好。需要引入支持中文的分析器elasticsearch-analysis-ik。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号