郑州公司网站如何制作,网站正在建设中9797,网站新闻列表页面代码,金融理财网站建设基本操作
创建不同的分词器 ik_smart#xff1a; 极简分词 #xff1b; ik_max_word: 最细力再度分词 基本的rest命令
methodurl地址描述PUTlocalhost:9200/索引名称/类型名称/文档id创建文档#xff08;指定文档id#xff09;POSTlocalhost:9200/索引名称/类型名称创建文…基本操作
创建不同的分词器 ik_smart 极简分词 ik_max_word: 最细力再度分词 基本的rest命令
methodurl地址描述PUTlocalhost:9200/索引名称/类型名称/文档id创建文档指定文档idPOSTlocalhost:9200/索引名称/类型名称创建文档随机文档idPOSTlocalhost:9200/索引名称/类型名称/文档id/_update修改文档DELETElocalhost:9200/索引名称/类型名称/文档id删除文档GETlocalhost:9200/索引名称/类型名称/文档id查询文档通过文档idPOSTlocalhost:9200/索引名称/类型名称/_search查询所有数据
索引基本操作
查询所有索引
Elasticsearch 7.x 版本 # 返回一个仅包含索引名称的 JSON 数组 GET /_cat/indices?formatjsonhindex 扩展获取ES的其他信息 GET _cat/health # 查看健康值 GET _cat/indices?v #查看所有东西的版本信息 新增索引 # ElasticSearch的7.x.x版本PUT /索引名/类型名/文档id{请求体} # 创建索引 PUT test1{mappings: {properties: {name: {type: text},age:{type: integer}}}} # 创建加索引时同时添加数据es会自动给属性设置type# ElasticSearch的8.x.x版本类型已经弃用默认写_doc。PUT /索引名/_doc/文档id{请求体}PUT test1/_doc/1{name:小明,age:23} # ElasticSearch的8.x.x版本类型已经弃用默认写_doc。PUT /索引名/_doc/文档id{请求体} CreateIndexRequest request new CreateIndexRequest(INDEX);CreateIndexResponse response client.indices().create(request, RequestOptions.DEFAULT);
查看索引 name需要指定类型 官网类型文档地址Keyword type family | Elasticsearch Guide [8.9] | Elastic 字符串类型 text、keyword 数值类型 longintegershortbytedoublefloathalf floatscaled float 日期类型 date te布尔值类型 boolean· 二进制类型 binary 等等…… 设置字段类型 修改索引 索引是不可修改的。一旦创建了索引您不能直接修改其结构或字段的映射。如果要修改索引的结构您需要重新创建索引并重新索引数据。 POST _reindex{source: {index: your_old_index},dest: {index: new_index}} 新索引和旧索引的字段不一定需要完全一致。在重新创建索引和重新索引数据时可以对字段进行修改、删除或添加新的字段。 如果字段在新索引中已经存在则该字段的映射将被保留。如果字段在新索引中不存在则会根据重新索引的数据动态创建字段的映射。 例如假设旧索引中有一个 field1 字段而新索引中没有。在重新索引数据时如果数据中存在 field1 字段Elasticsearch 将自动创建该字段的映射并将其添加到新索引中。 同样地如果旧索引中存在一个 field2 字段而新索引中也有一个名为 field2 的字段那么在重新索引数据时新索引中的 field2 字段的映射将保留不变。 需要注意的是如果字段在新索引和旧索引中具有不兼容的类型或映射定义可能会导致数据转换或丢失。因此在进行索引结构修改时请确保对数据和字段映射的变化有充分的了解和计划。 删除索引 关于文档的基本操作
基本操作
添加数据
PUT /index/_doc/1
{name: 狂神说,age: 3,desc: 工资2500,tags: [直男,温暖,技术宅]
}
PUT /index/_doc/2
{name: 张三,age: 30,desc: 没有工资,tags: [渣男,旅游,交友]
}
查询数据 # 查询索引下对应文档ID的数据
GET /index/_doc/1
GET /index/_doc/2更新 PUT不推荐 PUT 修改数据需要全属性字段都存在否则会丢失缺失的属性字段 # 修改数据
put index/_doc/1
{name: 杨光1,age: 3,desc: 工资2500,tags: [直男,温暖,技术宅]
}
# PUT 修改时会更新该ID下的所有字段如果缺失字段则会删除原有字段
put index/_doc/1
{name: 杨光1,age: 3,desc: 工资2500
} 更新 POST推荐 # POST 更新会修改该文档ID下对应属性的值
POST index/_update/1
{doc: {name:杨光3}
}# POST 更新会修改该文档ID下对应属性的值,不推荐这样写ES8执行不支持这种语法
POST index/_doc/1/_update
{doc: {name:杨光4}
} 条件查询
PUT /index/_doc/1
{name: 杨光,age: 3,desc: 工资2500,tags: [直男,温暖,技术宅]
}PUT /index/_doc/2
{name: 张三,age: 30,desc: 没有工资,tags: [渣男,旅游,交友]
}# 根据name查询
GET index/_search?qname:张三 PUT index
{mappings: {properties: {name:{type: keyword},xm:{type: text,analyzer: ik_smart},age:{type: integer},desc:{type: text},tags:{type: text}}}
}
# 测试数据
PUT /index/_doc/1
{name: 杨光,xm: 杨光,age: 3,desc: 工资2500,tags: [直男,温暖,技术宅]
}PUT /index/_doc/2
{name: 张三,xm: 张三,age: 30,desc: 没有工资,tags: [渣男,旅游,交友]
}PUT /index/_doc/3
{name: 李三,xm: 李三,age: 23,desc: 工资5000,tags: [健身,旅游,购物]
}PUT /index/_doc/4
{name: 张三丰,xm: 张三丰,age: 10,desc: 工资5000,tags: [健身,旅游,购物]
}PUT /index/_doc/5
{name: 张,xm: 张,age: 10,desc: 工资5000,tags: [健身,旅游,购物]
}PUT /index/_doc/6
{name: 三,xm: 三,age: 10,desc: 工资5000,tags: [健身,旅游,购物]
}
match和term Match查询和Term查询是Elasticsearch中常用的查询类型它们有以下区别 匹配方式 Term查询对查询条件不进行分词直接按照完全匹配的方式进行查询。 Match查询对查询条件进行分词然后对分词后的词项进行匹配。 查询字段类型 Term查询适用于精确匹配的字段如关键字keyword类型或未分词的文本类型如张三不会被分词。 Match查询适用于全文本字段如全文本text类型或已分词的文本类型如张三 张三会被分词成两个词项张三。 匹配精度 Term查询精确匹配只有完全匹配的词项才会被返回。 Match查询默认为词项级别的匹配可以根据分析器的分词规则进行模糊匹配。 执行效率 Term查询由于不进行分词查询速度较快。 Match查询需要对查询条件进行分词可能会影响查询性能。 根据具体的查询需求选择合适的查询类型可以提高查询的准确性和效率。如果需要精确匹配的查询且不需要分词可以选择Term查询如果需要对分词后的文本进行匹配可以选择Match查询。 match查询
# match 查询时会对查询条件先分词
# 而name字段类型为keyword不会分词所以只能搜到name张三的数据
GET index/_search
{query: {match: {name: 张三}},_source: [name,xm]
}
# match 查询会对查询条件先分词
# xm字段类型为text,用ik_max_smart分词会分词所以只能搜到文档xm字段分词后结果为张三分词后的所有数据
GET index/_search
{query: {match: {xm: 张三}},_source: [name,xm]
} term查询
# term 查询时不会对查询条件进行分词name为keyword所以只能完全匹配
GET index/_search
{query: {term: {name: 张三}}
}
# term 查询不会对查询条件进行分词
# xm字段类型为text,用ik_max_smart分词会分词所以能查到文档分词后为张三的数据
GET index/_search
{query: {term: {xm: 张三}},_source: [name,xm]
} 过滤字段查询
# 查询结果只展示 name和xm两个字段
GET index/_search
{_source: [name,xm]
} 排序
# 查询结果排序
GET index/_search
{_source: [name, age], sort: [{age: {order: desc}}]
} 分页查询
# 分页查询
GET index/_search
{_source: [name, age],from: 0,size: 2
} 多条件查询布尔值查询
must 类似sql中的 and # 查询 name 张三 并且 age 30
GET index/_search
{query: {bool: {must: [{match: {name: 张三}},{match: {age: 30}}]}}
} should 类似sql中的 or # 查询 name 张三 或者 name 李三
GET index/_search
{query: {bool: {should: [{match: {name: 张三}},{match: {name: 李三}}]}}
} must_not 类似sql中的 not in # 查询 name ! 张三 并且 name ! 李三
GET index/_search
{query: {bool: {must_not: [{match: {name: 张三}},{match: {name: 李三}}]}}
} filter 在Elasticsearch中过滤器Filter是一种用于精确筛选文档的查询子句主要用于限制搜索结果的范围。与查询Query不同过滤器不会评分和排序结果而是根据指定的条件进行筛选。这可以提高查询性能特别是在过滤大量文档的情况下。 过滤器可以用于各种条件如范围查询、存在性检查、逻辑运算等。常见的过滤器类型包括 Term Filter根据指定的词项进行精确匹配筛选。 Range Filter通过指定的范围进行筛选可以用于数值、日期等字段。 Exists Filter检查字段是否存在于文档中。 Bool Filter通过逻辑运算符AND、OR、NOT对其他过滤器进行组合。 Geo Distance Filter通过指定的地理位置和距离范围进行地理位置过滤。 Script Filter使用自定义脚本进行筛选。 过滤器可以单独使用也可以与查询结合使用。如果需要对搜索结果进行精确的筛选并且不需要评分和排序建议使用过滤器来提高查询性能。 # 查询xm张三并且age 30 且 age 10 ,并且age 倒序
GET index/_search
{_source: [xm,age],query: {bool: {must: [{match: {xm: 张三}}], filter: [{range: {age: {gte: 10,lt: 30}}}]}},sort: [{age: {order: desc}}]
}# 查询xm张三并且age 30 且 age 10 ,并且 xm 字段值
GET index/_search
{_source: [xm,age],query: {bool: {must: [{match: {xm: 张三}}],filter: [{range: {age: {gte: 10,lt: 30}}},{exists: {field: xm}}]}}
} 高亮查询
# 对搜索结果命中的字段添加自定义html标签
GET index/_search
{query: {term: {xm: {value: 张三}}}, highlight: {pre_tags: font color red,post_tags: /font, fields: {xm: {}}},_source: xm
}