ES相关的知识总结一

1)type

Elasticsearch中支持的数据类型非常丰富:

  • String类型,又分两种:
    • text:可分词,不可参与聚合
    • keyword:不可分词,数据会作为完整字段进行匹配,可以参与聚合
  • Numerical:数值类型,分两类
    • 基本数据类型:long、interger、short、byte、double、float、half_float
    • 浮点数的高精度类型:scaled_float
      • 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
  • Date:日期类型
    elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

2)index

index影响字段的索引情况。

  • true:字段会被索引,则可以用来进行搜索。默认值就是true
  • false:字段不会被索引,不能用来搜索

index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。

但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。

3)store

是否将数据进行额外存储。_source

在学习lucene和solr时,我们知道如果一个字段的store设置为false,那么在文档列表中就不会有这个字段的值,用户的搜索结果中不会显示出来。

但是在Elasticsearch中,即便store设置为false,也可以搜索到结果。

原因是Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做_source的属性中。最终我们查询数据是从_source中来取值,所以可以通过过滤_source来选择哪些要显示,哪些不显示。

而如果设置store为true,就会在_source以外额外存储一份数据,多余,因此一般我们都会将store设置为false,事实上,store的默认值就是false。

4)boost

激励因子,这个与lucene中一样

其它的不再一一讲解,用的不多,大家参考官方文档:

还有查询的更多东西(mathch all)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
GET /heima/_search
{
​ “query”:{
​ “match_all”: {}
​ }
}
匹配查询(match)
GET /heima/_search
{
​ “query”:{
​ “match”:{
​ “title”:”小米电视”
​ }
​ }
}
多字段查询(multi_match)
GET /heima/_search
{
​ “query”:{
​ “multi_match”: {
​ “query”: “小米”,
​ “fields”: [ “title”, “subTitle” ]
​ }
​ }
}
词条匹配(term)
GET /heima/_search
{
​ “query”:{
​ “term”:{
​ “price”:2699.00
​ }
​ }
}
多词条精确匹配(terms)
GET /heima/_search
{
​ “query”:{
​ “terms”:{
​ “price”:[2699.00,2899.00,3899.00]
​ }
​ }
}

结果过滤

默认情况下,elasticsearch在搜索的结果中,会把文档中保存在_source的所有字段都返回。

如果我们只想获取其中的部分字段,我们可以添加_source的过滤

1
2
3
4
5
6
7
8
9
GET /heima/_search
{
“_source”: [“title”,”price”],====>includi exclud
“query”: {
​ “term”: {
​ “price”: 2699
​ }
}
}