PUT请求格式说明

PUT /index_name
{
  "mappings": {
    "properties": {
      "field1": {
        "type": "text",
        "analyzer": "ik_smart",
        "index": true
      },
      "field2": {
        "type": "keyword",
        "index": false,
         "copy_to": "all"
      },
      "field3": {
        "type": "integer"
      },
      "all": {
        "type": "text",
        "analyzer": "ik_max_word"
      }
      "nested_field": {
        "properties": {
          "nested_subfield": {
            "type": "keyword"
          }
        }
      }
      // 可添加更多字段定义
    }
  }
}

映射属性说明

  1. 索引名称

    • index_name:要创建或更新的索引名称。
  2. Mappings映射

    • mappings:包含了索引的映射定义,其中properties定义了索引中的字段。
  3. Properties属性

    • properties字段下,定义每个字段的类型和属性。

    • 字段类型(type)

      • text:用于全文搜索的文本字段,会被分析(如分词)。
      • keyword:精确匹配的关键字字段,不会被分析。
      • integer:整数类型字段。
      • copy_to属性指定将该字段的内容复制到all字段中,以便于在搜索时统一检索。
    • 分词器(analyzer)

      • 用于处理文本字段的分析器,例如ik_smart用于中文智能分词。
    • 是否索引(index)

      • true:默认值,表示字段应该被索引,可以进行搜索。
      • false:表示字段不会被索引,无法进行搜索,但可以被存储和检索。
    • 复合字段(nested properties)

      • 通过在字段下嵌套properties定义复杂类型字段,如对象或嵌套文档。

示例说明

  • field1:文本字段,使用ik_smart分词器进行分析,允许被索引。
  • field2:关键字字段,不进行分析,不被索引。
  • field3:整数字段,用于存储整数值。
  • nested_field:嵌套字段示例,定义了一个包含nested_subfield的子属性,其类型为关键字。

以上是如何在Elasticsearch中使用PUT请求创建索引,并定义其映射(mappings)的详细说明。这些定义决定了索引如何存储和处理数据,是数据搜索和分析的基础。

这个请求示例展示了如何使用PUT请求来修改现有索引(heima)的映射(_mapping)。在Elasticsearch中,一旦索引创建后,通常不能直接修改现有字段的映射类型。但是,你可以通过重新定义整个字段的方式来近似修改映射。

请求说明

  1. 索引名称

    • heima:要修改映射的索引名称。
  2. PUT请求

    • 使用PUT请求指定索引名称和_mapping端点来更新映射。
  3. Mappings映射

    • 在请求体中,使用properties字段重新定义name字段的映射。
  4. Properties属性

    • name字段重新定义为一个包含fistnamelastname的复合字段。
    • fistnamelastname字段的类型都设置为keyword,这意味着它们是精确匹配的关键字字段。

示例说明

PUT /heima/_mapping
{
    "properties": {
        "name": {
            "properties": {
                "fistname": {
                    "type": "keyword"
                },
                "lastname": {
                    "type": "keyword"
                }
            }
        }
    }
}

在这个示例中:

  • name字段被重新定义为一个对象类型的字段,其中包含了fistnamelastname两个子字段。
  • 每个子字段的类型都被设置为keyword,这表示它们是精确匹配的关键字字段,不会进行分析。

请注意,虽然可以通过重新定义整个字段来近似修改映射,但这个操作实际上是创建一个新的映射定义,替换了旧的映射。这意味着在执行这个请求后,旧的索引映射将会被完全替换为新的映射定义。

好的,我会为您提供更详细的说明,特别是关于query字段的可选项和range查询的可选字段。

  1. query字段详细说明:

query字段是Elasticsearch查询的核心,可以包含以下主要类型的查询:

a) match_all: 匹配所有文档

"match_all": {}

b) match: 单字段全文搜索

"match": {
  "字段名": "查询值"
}

c) multi_match: 多字段全文搜索

"multi_match": {
  "query": "查询值",
  "fields": ["字段1", "字段2", ...]
}

d) term: 精确匹配

"term": {
  "字段名": {
    "value": "精确值"
  }
}

e) range: 范围查询

"range": {
  "字段名": {
    "gte": 最小值,
    "lte": 最大值
  }
}
  1. range查询的可选字段说明:

range查询用于数值或日期范围搜索,包含以下可选字段:

  • gt: 大于 (greater than)
  • gte: 大于等于 (greater than or equal to)
  • lt: 小于 (less than)
  • lte: 小于等于 (less than or equal to)

示例:

"range": {
  "age": {
    "gt": 20,
    "lt": 30
  }
}

对于日期字段,还可以使用日期数学表达式:

"range": {
  "date": {
    "gte": "now-1d/d",
    "lt": "now/d"
  }
}
  1. 更多query类型:

f) bool: 复合布尔查询

"bool": {
  "must": [ ... ],
  "should": [ ... ],
  "must_not": [ ... ],
  "filter": [ ... ]
}
  • must 、 should 、must_not、 filter、
  • 后面可以使用 match_all 、match 、multi_match、geo_bounding_box、geo_distance、range、term、

g) fuzzy: 模糊匹配

"fuzzy": {
  "字段名": {
    "value": "近似值",
    "fuzziness": 2
  }
}

h) prefix: 前缀匹配

"prefix": {
  "字段名": "前缀"
}

i) wildcard: 通配符匹配

"wildcard": {
  "字段名": "通配符*模式"
}

j) geo_distance: 地理距离查询

"geo_distance": {
  "distance": "10km",
  "字段名": {
    "lat": 40,
    "lon": -70
  }
}

完整查询示例:

GET /索引名/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "搜索关键词" } }
      ],
      "filter": [
        { "term": { "status": "published" } },
        { "range": { "publish_date": { 
            "gte": "2023-01-01",
            "lte": "2023-12-31"
          }
        }}
      ]
    }
  },
  "sort": [
    { "publish_date": { "order": "desc" } }
  ],
  "from": 0,
  "size": 10,
  "highlight": {
    "fields": {
      "title": {}
    }
  }
}

这个查询示例结合了布尔查询、match查询、term过滤、range过滤、排序、分页和高亮功能,展示了Elasticsearch查询的强大和灵活性。

通过组合这些查询类型和参数,您可以构建出满足各种复杂搜索需求的查询。根据具体的应用场景,您可以选择合适的查询类型并调整参数来优化搜索结果。

刚学java菜鸡,永劫无间蚀月,王者荣耀王者,金铲铲小铂金,第五人格菜鸡,原神开服玩家,星穹铁道菜鸡,崩坏的菜鸡,闪耀暖暖,和平精英,LOL,CSGO,以及三A大作收集者等等。。。