一、名词解释

  • 分析器(Analyzer):,包含三个功能:字符过滤器(Character filters),分词器(Character filters),词过滤器(Character filters)。三个功能按顺序执行。
  • 字符过滤器(Character filters):用来清理还没被分词的字符串。例如清理 HTML 文本中的 HTML 标签,就可以使用 html_strip 字符过滤器,并且该过滤器还会把类似于 Á 的字符实体转换为对应的 Unicode 字符。一个分析器可以包含 0 个或者多个字符过滤器。
  • 分词器(Tokenizers):一个分析器必须含有一个唯一的分词器。分词器将文本解构成词汇,并移除大部分标点符号。
  • 词过滤器(Token filters):分词器处理后的词汇会依次按照设置的词过滤器顺序进行过滤。词过滤器用来修改、添加或者移除词汇。例如,lowercase 小写转换词过滤器,stop 停用词词过滤器等等。
  • 映射(mapping):设定文档(Document)中每个字段的数据类型,及其它选项。

二、索引管理

一个较为完整的索引管理命令如下:

$ curl -XPUT "http://elasticsearch:9200/Index" -H 'Content-Type: application/json' -d '
{
        "setting": {
                "number_of_shards" : 5,
                "number_of_replicas" : 1,
                "analysis": {
                        "char_filter": { ... },
                        "tokenizer": { ... },
                        "filter": { ... },
             "analyzer": {
                 "my_analyzer": {
                      "type":         "custom",
                      "char_filter":  [ "html_strip", "&_to_and" ],
                      "tokenizer":    "standard",
                      "filter":       [ "lowercase", "my_stopwords"]
                  }
             }
                }
        },
        "mappings": {
        "my_type": {
            "id": {
                "type": "long"
            }
            "title": {
                "type": "text"
                "analyzer": "thulac"
            }
            "created_at": {
                "type": "date"
            }
            }
        }
}'

2.1 设置(Setting)

setting 键中的设置可以省略,因为都有默认值,如果有需要定义的选项才会进行设置。

  • analysis:自定义与文本分析有关的设置,参见指南中的自定义分析器章节
    • char_filter:自定义字符过滤器。
    • tokenizer:自定义分词器。
    • filter:自定义词过滤器。
    • analyzer:自定义分析器,设置自定义名称,以及要使用的 char_filtertokenizerfilter

2.2 映射(Mappings)

mappings 下是类型(Type)名称,ES 6. 只允许有一个类型,ES 7. 将取消类型。类型下就是具体的字段名称及其对应的选项:

  • 字段类型(type)

    常见的字段类型有:

    • 字符串:stringkeyword
    • 整数byteshortintegerlong
    • 浮点数floatdoublehalf_floatscaled_float
    • 布尔值boolean
    • 日期date
    • 二进制binary
    • 范围integer_rangefloat_rangelong_rangedouble_rangedate_range
    • 数组:(不需要指定类型)
    • 对象object (针对单个 JSON 对象)
    • 嵌套nested (针对数组中嵌套多个 JSON 对象)
    • IPip

    更多类型查看文档的字段类型章节。

    可以为一个字段设置多个字段类型,这会建立多个索引,以便在不同的查询条件下使用不同的索引类型。

    设置为 keyword 类型的字符串不会被分析器处理,只能通过是否相等进行判断,相当于旧版本的 "index": "not_analyzed"

  • 分析器(analyzer):用来对指定的字段设置指定的分析器。

  • 索引(index)

    是否创建该字段的索引。可选值: true(默认)或 false。没有索引的字段不能被搜索。

  • 字段(fields):为同一字段设置不同的索引。

三、常用命令

  • 获取映射(mappings)信息:

    $ curl -XGET "http://elasticsearch:9200/Index/_mapping/Type?pretty"
    
  • 搜索指定索引(Index)类型(Type)下的所有文档:

    $ curl -XGET "http://elasticsearch:9200/Index/Type/_search?pretty"
    

四、参考文章

如何使用 Elasticsearch 6.2 搜索中文、日文和韩文文本

(完)