主要知识点
1、query string基础语法
2、_all metadata的理解
一、query string基础语法
1、GET /test_index/test_type/_search?q=test_field:test
查询test_field这个field(字段)中包含关键字test的所有数据。
2、GET /test_index/test_type/_search?q=+test_field:test
"+"的意思就是必须包含后面的关键字test,其实加不加这个"+"号都是一样的
3、GET /test_index/test_type/_search?q=-test_field:test
"-"的意思就是必须不包含后面的关键字test。
二、_all metadata的原理和作用
GET /test_index/test_type/_search?q=test
可以使用这种语法直接搜索所有的field,任意一个field包含指定的关键字就可以搜索出来。这种语法就用到了_all metadata的原理。
在es建立索引的时候,当我们插入一条document,它里面包含了多个field,此时,es会自动将多个field的值,全部用字符串的方式串联起来,变成一个长的字符串,作为_all field的值,然后分词后建立倒排索引。如果在搜索的时候没有指定对某个特定field进行搜索,就默认搜索_all field的值,其中是包含了所有field的值。
举个例子,假设有一个document的值如下:
{
"name": "jack",
"age": 26,
"email": "jack@sina.com",
"address": "guamgzhou"
}
es中的_all metadata的值就是 "jack 26 jack@sina.com guangzhou",同时对该字符串进行分词后建立对应的倒排索引。