分为url search 和request body search两类。
一,url search;
// 带profile分析,指定default field
GET lcy_test/_search?q=lcy2&df=name
{
"profile": "true"
}
// 泛查询,不指定df,查询所有字段是否包含lcy2
GET lcy_test/_search?q=lcy2
{
"profile": "true"
}
// 指定字段查询
GET lcy_test/_search?q=name:lcy2
{
"profile": "true"
}
// phrase查询,用双引号包裹关键字,进行精确查询
GET lcy_test/_search?q=name:"yong hah"
{
"profile": "true"
}
// phrase查询,对name进行name=yong的关键字查询,然后对所有指定执行*=hah的查询
GET lcy_test/_search?q=name:yong hah
{
"profile": "true"
}
// group查询,用小括号包裹关键字,进行分组查询,相当于name=yong or name=hah
GET lcy_test/_search?q=name:(yong hah)
{
"profile": "true"
}
// group查询,用小括号包裹关键字,进行分组查询,相当于name=yong and name=hah
GET lcy_test/_search?q=name:(yong and lcy)
{
"profile": "true"
}
// 范围查询
GET lcy_test/_search?q=_id:>=1
{
"profile": "true"
}
// 通配符查询
GET lcy_test/_search?q=name:*cy
{
"profile": "true"
}
// phrase查询的近似度、匹配度查询,~2表示在lcy yong之间可以匹配任意0到2个单词,比如 "lcy who am yong"
GET lcy_test/_search?q=name:"lcy yong"~2
{
"profile": "true"
}
二,request body search;
// 指定要查询的字段,不指定的不查出来
POST lcy_test/_search
{
"_source": "name",
"query": {
"match_all": {}
}
}
// 脚本字段,拼接多个字段
POST lcy_test/_search
{
"script_fields": {
"yongge": {
"script": {
"lang": "painless",
"source": "doc['name'].value + doc['_id'].value"
}
}
},
"query": {
"term": {
"_id": {
"value": "7yqbDXcBULe3Ewa0I5gK"
}
}
}
}
// query_string 查询
POST lcy_test/_search
{
"query": {
"query_string": {
"default_field": "name",
"query": "lcy AND yong"
}
}
}
// simple_query_string 查询
POST lcy_test/_search
{
"query": {
"simple_query_string": {
"query": "lcy yong",
"fields": ["name"],
"default_operator": "AND"
}
}
}
// bool组合查询
POST lcy_test/_search
{
"query": {
"query_string": {
"query": "(lcy AND yong) or china",
"fields": ["name","firstname"]
}
}
}
三,指标:查准率和查全率
查准率 = 正确结果/所有结果;
查全率 = 正确结果/所有正确结果
ps:遇到的问题
1,使用脚本字段查询时报错
elasticsearch Fielddata is disabled on text fields by default
因为列上默认fielddata是false,因为聚合查询非常费内存,所以默认没有打开,需要修改映射,在列上增加"fielddata": true属性。
解决办法是修改mapping
PUT lcy_test/_mapping
{
"properties": {
"name": {
"type": "text",
"fielddata": true
}
}
}