elasticsearch 搜索api

分为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
    }
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小手追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值