Elasticsearch(五)

2019-08-21 22:34:28 浏览数 (1)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

在文档在加入倒排索引之前,会对数据进行一系列的分析。基本分为以下几个步骤。

概述

*字符过滤---使用字符过滤器转变字符。

*文本切分为分词---将文本切分为单个或多个分词。

*分词过滤---使用分词过滤器转变每个分词。

*分词索引---将这些分词存储到索引中。

以上几个步骤可以参考下图:

字符过滤器可以将 特定的的字符序列转变为其他的字符序列,比如将 I love u 2 转换为I love you too.

文本切分为分词,实际上是利用分词器将文本切分为分词,英文可以表示为token,比如 share your experience with NoSql and big data technologies分解为share,your,experience,with,NoSql,and,big,data,technologies.在分词完成后并不是直接对token建立倒排索引,而是将每个分词运用分词过滤器,分词作为输入,输入到分词过滤器中,根据需要进行修改、添加或者是删除,最为常用的分词过滤器小写分词过滤器,这也是为了保证在搜索词条“nosql”的时候可以找回“NoSql”。另外还有其他两种常用的分词过滤器,一种是停用词分词过滤器,可以删除停用词。另一种是同义词分词过滤器,比如讲token"tools"作为“technologies”作为同义词进行添加。

在分词经历了零个或者是多个分词过滤器后,它们被发送到Lucene进行文档的索引。

对这些分析器的设置可以在索引创建时,可以在elasticsearch配置文件中进行配置,还可以在映射中指定某个字段的分析器。

在索引创建时添加分析器

代码语言:javascript复制
curl -XPOST 'localhost:9200/index' -d '
{
    "settings":{
    "number_of_shards":2,
    "number_of_replicas":1
        },
    "mappings":{}
}'

在setting中可以对索引的分析进行设置。

代码语言:javascript复制
curl -XPOST 'localhost:9200/index' -d '
{
    "settings":{
    "number_of_shards":2,
    "number_of_replicas":1,
    "index": {
      "analysis": {
        "analyzer": {
          "myCustomAnalyzer": {
            "type": "custom",
            "tokenizer": "myCustomTokenizer",
            "filter": ["myCustomFilter1", "myCustomFilter2"],
            "char_filter": ["myCustomCharFilter"]
          }
        },
        "tokenizer": {
          "myCustomTokenizer": {
            "type": "letter"
          },
          "myCustomNGramTokenizer": {
            "type" : "ngram",
            "min_gram" : 2,
            "max_gram" : 3
          }

        },
        "filter": {
          "myCustomFilter1": {
            "type": "lowercase"
          },
          "myCustomFilter2": {
            "type": "kstem"
          }
        },
        "char_filter": {
          "myCustomCharFilter": {
            "type": "mapping",
            "mappings": ["ph=>f", " u => you ", "ES=>Elasticsearch"]
          }
        }
      }
    }
  },
    "mappings":{}
}'

在elasticsearch的配置中添加分析器

在索引创建的时候设置分析器,不需要重启ES就可以修改分析器,但是在es的配置中指定分析器,那么需要重启es后才能使得分析器的修改生效,在elasticsearch.yml中设置分析器。

在映射中指定某个的字段的分析器

代码语言:javascript复制
{
     "mappings" : {
    "group" : {
      "_source" : {
        "enabled" : true
      },
      "_all" : {
        "enabled" : true
      },
      "properties" : {
        "organizer" : { "type" : "string" },
        "name" : { "type" : "string","analyzer":"myCustomAnalyzer" },
      }
    }
  }


}

0 人点赞