mapping属性:
mapping是对索引库中文档的约束,常见的mapping属性包括:
- type:字段数据类型,常见的简单类型有:
- 字符串: text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)
- 数值:long.integer.short、byte、double、float
- 布尔: boolean
- 日期:date
- 对象: object
- index:是否创建索引,默认为true创建索引
- analyzer:使用哪类分词器
- properties:该字段的子字段
索引库操作
- 创建索引库:PUT/索引库名
- 查询索引库:GET/索引库名
- 删除索引库:DELETE/索引库名
- 修改索引库(添加字段):PUT/索引库名/_mapping
文档操作
- 创建文档:POST/索引库名/_doc/文档id { json文档}
- 查询文档:GET/索引库名/_doc/文档id
- 删除文档:DELETE/索引库名/_doc/文档id
- 修改文档:
- 全量修改:PUT/索引库名/_doc/文档id { json文档}
- 增量修改:POST/索引库名/_update/文档id { "doc":{字段}}
查询文档:
Elasticsearch提供了基于JSON的DSL来定义查询。常见的查询类型包括:
查询所有
查询所有数据。例:match_all
# 查询所有
GET /hotel/_search
{
"query": {
"match_all": {}
}
}
全文检索
利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例:
match_query:对单个字段进行查询
GET /hotel/_search
{
"query": {
"match": {
"字段": "值"
}
}
}
multi_match_query:对多个字段进行查询,字段越大性能越低
GET /hotel/_search
{
"query": {
"multi_match": {
"query": "值",
"fields": ["字段1","字段2"]
}
}
}
精确查询
根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例:
ids 根据id来查询
GET /hotel/_search
{
"query": {
"ids": {
"values": ["434082"]
}
}
}
- term 根据词条精确值查询
GET /hotel/_search
{
"query": {
"term": {
"字段": {
"value": "值"
}
}
}
}
- range 根据值的范围查询
GET /hotel/_search
{
"query": {
"range": {
"字段": {
# gte 大于等于,gt 大于,lte 小于等于,lt 小于
"gte": 200, # 大于等于
"lte": 300 # 小于等于
}
}
}
}
地理
根据经纬度查询,例:
geo_distance
GET /hotel/_search
{
"query": {
"geo_distance": {
"location": "31.21,121.5", # 地理坐标
"distance": "12km" # 范围
}
}
}
复合
- Function Query
可以修改文档相关性算分,根据新得到的算分排序
例:查询包含“外滩”的酒店,并且给id为434082的酒店加4分
GET /hotel/_search
{
"query": {
"function_score": {
"query": {
"match": {
"all": "外滩"
}
},
"functions": [
{
"filter": {
"ids": {
"values": [
"434082"
]
}
},
"weight": 4
}
],
"boost_mode": "sum"
}
}
}
- Boolean Query
布尔查询是一个或多个查询子句的组合。子查询的组合方式有:
- must:必须匹配每个子查询,类似“与”
- should:选择性匹配子查询,类似“或”
- must_not:必须不匹配,不参与算分,类似“非”
- filter:必须匹配,不参与算分
例:查询坐标在31.21,121.5附件10km的价格不高于400的如家酒店
GET /hotel/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"brand": "如家"
}
}
],
"must_not": [
{
"range": {
"price": {
"gte": 400
}
}
}
],
"filter": [
{
"geo_distance": {
"distance": "10km",
"location": {
"lat": 31.21,
"lon": 121.5
}
}
}
]
}
}
}