介绍
- 单词级别查询
- 这些查询通常用于结构化的数据,比如:number, date, keyword 等,而不是对 text
- 也就是说,全文本查询之前要先对文本内容进行分词、而单词级别的查询直接在相应字段的反向索引中精确查找,单词级别的查询一般用于数值、日期等类型的字段上
准备工作
使用 kibana 可视化工具
删除 nba 索引
创建 nba 索引 和 映射
PUT nba
{
"mappings": {
"properties": {
"birthDay":{
"type":"long"
},
"code":{
"type":"text"
},
"country":{
"type":"text"
},
"countryEn":{
"type":"text"
},
"displayAffiliation":{
"type":"text"
},
"displayName":{
"type":"text"
},
"displayNameEn":{
"type":"text"
},
"draft":{
"type":"long"
},
"heightValue":{
"type":"float"
},
"jerseyNo":{
"type":"text"
},
"playYear":{
"type":"long"
},
"playerId":{
"type":"text"
},
"position":{
"type":"text"
},
"schoolType":{
"type":"text"
},
"teamCity":{
"type":"text"
},
"teamCityEn":{
"type":"text"
},
"teamConference":{
"type":"text"
},
"teamConferenceEn":{
"type":"text"
},
"teamName":{
"type":"keyword"
},
"teamNameEn":{
"type":"keyword"
},
"weight":{
"type":"text"
}
}
}
}
导入数据,参考:数据导入参考
curl -X POST "localhost:9200/_bulk" -H 'Content-Type: application/json' --data-binary @player
Term query 精确匹配查询
查找球衣号码为23的球员
POST nba/_search
{
"query":{
"term":{
"jerseyNo": "23"
}
}
}
Exsit query 在特定的字段中查找非空值的文档
查出 teamNameEn
字段不为空的文档
POST nba/_search
{
"query":{
"exists":{
"field": "teamNameEn"
}
}
}
Prefix query 查找包含带有指定前缀term的文档
适合 字段类型 为 keyword
, 非 text
类型
POST nba/_search
{
"query":{
"prefix": {
"teamNameEn": "Rock"
}
}
}
wildcard query 支持通配符查询
*
表示任意字符 ?
表示任意单个字符
POST nba/_search
{
"query":{
"wildcard": {
"teamNameEn": "Ro*s"
}
}
}
Regexp query 正则表达式查询
POST nba/_search
{
"query":{
"regexp": {
"teamNameEn": "Ro.*s"
}
}
}
ids query 通过ID查询
POST nba/_search
{
"query":{
"ids":{
"values": [1,2]
}
}
}