最近新上一个检索相关的项目,需要用到elasticsearch,快速学习了下es的查询语法,目前业务上用到的就这么多,待更新
1.通配符和正则表达式查询:
结合?和*字符可以进行模糊查询,?用来匹配任意字符,*用来匹配零个或者多个字符。但是查询速度会较慢,避免用通配符作为开头{
"query": {
"wildcard": {
"field": "W?F*HW"
}
}
}
2.多字段查询:
{
"query": {
"bool": {
"must": [//还有个should,没仔细研究
{ "match": { "field": "value" }},
{ "match": { "field": "value" }}
]
}
}
}
1和2 组合查询:
{
“from”:0,
"size":1000,
"query": {"bool": {
"must": [
{ "match": { "field": "value" }},
{ "match": { "field": "value" }},
{ "wildcard": {
"field": "W?F*HW"
}
}
{ "range": {//时间区间
"field": {
"gte": "value",
"lt": "value"
}
}
}
]
}
}
}
3.bulk批量建索引
request文件内容如下:
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }
查询命令:
curl -s -XPOST localhost:9200/_bulk --data-binary '@request'
4.快速检索语法:
在进行一般性搜索时,一般搜索框中输入的值无法判断属于哪个字段,就需要用到一种快速查询语法:
curl -XGET "localhost:9200/test/tabl1/_search?q=%s&from=0&size=1000"
5.修改设置
在进行查询时,如果查询体里没有from和size参数,则默认最多返回5条搜索结果,且默认的size最大为10000,超过则返回错误。
为了修改这个值,需要以下语法:
curl -XPUT "localhost:9200/test/_settings" -d '{
"settings": {
"index": {
"max_result_window": 1000000 #显示结果数
}
}
}'
6.关于内存限制
在返回结果为百万以上数量级时,总会报OOM错误,查看为java heap space的错误,google了一下原因,基本都是让改ES_HEAP_SIZE这个值,但是我这里改了没有用,于是在linux查看es的进程,发现在启动es服务时,es的bin文件会启动java,而且对java内存大小有个默认的值,于是直接修改es的bin文件中的JAVA_OPTS变量:
JAVA_OPTS='-server -Xms2048m -Xmx4096m -XX:PermSize=128m -XX:MaxPermSize=512m'
重启es,再看进程,果然内存重新分配,OOM错误解决。