目录

1、数据类型差异

2、确切值 与 全文文本

3、倒排索引


映射(mapping)机制用于进行字段类型确认,将每个字段匹配为一种确定的数据类型。

分析(analysis)机制用于进行全文文本的分词,以建立供搜索用的反向索引。

1、数据类型差异

对blog类型进行 _mapping,得到文档字段类型:

curl -XGET 'http://10.24.54.241:9200/website/_mapping/blog/?pretty'

结果:

{
  "website" : {
    "mappings" : {
      "blog" : {
        "properties" : {
          "date" : {
            "type" : "date",
            "format" : "yyyy/MM/dd HH:mm:ss||yyyy/MM/dd||epoch_millis"
          },
          "tags" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "te4t" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "text" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "title" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "views" : {
            "type" : "long"
          }
        }
      }
    }
  }
}

Elasticsearch 对对字段类型进行猜测,自动生成了字段和类型的映射关系。

2、确切值 与 全文文本

Elasticsearch 中的数据可以大致分为两种类型:

1. 确切值:确切值是确定的,例如 “Foo” 和 “foo” 就并不相同。

2. 全文文本:文本化的数据,比如文章或邮件正文,常被称为 非结构化数据 。

确切值是很容易查询的,因为结果是二进制的 —— 要么匹配,要么不匹配。

而对于全文数据的查询,却有些微妙。我们不会去询问 这篇文档是否匹配查询要求?。而会询问 这篇文档和查询的匹配度如何?

。换句话说,对于查询条件,这篇文档的相关性有多高?

+

我们很少确切的匹配整个全文文本。我们想在全文中查询包含查询文本的部分。不仅如此,我们还期望搜索引擎能理解我们的意图

  • 一个针对"UK"的查询将返回涉及"United Kingdom"的文档
  • 一个针对"jump"的查询同时能够匹配"jumped", "jumps", "jumping"甚至"leap"
  • "johnny walker"也能匹配"Johnnie Walker", "johnnie depp""Johnny Depp"
  • "fox news hunting"能返回有关hunting on Fox News的故事,而"fox hunting news"也能返回关于fox hunting的新闻故事。

为了方便在全文文本字段中进行这些类型的查询,Elasticsearch首先对文本分析(analyzes),然后使用结果建立一个倒排索引

3、倒排索引

Elasticsearch 使用一种叫做 倒排索引的结构来做快速的全文搜索。倒排索引由在文档中出现的唯一的单词列表,以及对于每个单词在文档中的位置组成。