概要
本篇主要介绍一下搜索模板、映射模板、高亮搜索和地理位置的简单玩法。
标准搜索模板
搜索模板search tempalte高级功能之一,可以将我们的一些搜索进行模板化,使用现有模板时传入指定的参数就可以了,避免编写重复代码。对常用的功能可以利用模板进行封装,使用时更简便。
这点类似于我们编程时的接口封装,将一些细节处理的东西封装成接口,供别人调用,使用者就只需要关注参数和响应结果就行,这样可以更好地提高代码复用率。
下面我们来看看最基本的几种用法
参数替换
GET /music/children/_search/template
{
"source": {
"query": {
"match": {
"{
{field}}":"{
{value}}"
}
}
},
"params": {
"field":"name",
"value":"bye-bye"
}
}
该搜索模板编译后等同于:
GET /music/children/_search
{
"query": {
"match": {
"name":"bye-bye"
}
}
}
使用Json格式的条件查询
{ {#toJson}}块内可以写稍微复杂一些的条件
GET /music/children/_search/template
{
"source": "{\"query\":{\"match\": {
{#toJson}}condition{
{/toJson}}}}",
"params": {
"condition": {
"name":"bye-bye"
}
}
}
该搜索模板编译后等同于如下:
GET /music/children/_search
{
"query": {
"match": {
"name":"bye-bye"
}
}
}
join语法
join内的参数names可以写多个:
GET /music/children/_search/template
{
"source": {
"query": {
"match": {
"name": "{
{#join delimiter=' '}}names{
{/join delimiter=' '}}"
}
}
},
"params": {
"name":["gymbo","you are my sunshine","bye-bye"]
}
}
该搜索模板编译后等同于如下:
GET /music/children/_search
{
"query": {
"match": {
"name":"gymbo you are my sunshine bye-bye"
}
}
}
搜索模板的默认值设置
可以对搜索模板进行一些默认值的设置,如{ {^end}}500表示如果end参数为空,默认值为500
GET /music/children/_search/template
{
"source":{
"query":{
"range":{
"likes":{
"gte":"{
{start}}",
"lte":"{
{end}}{
{^end}}500{
{/end}}"
}
}
}
},
"params": {
"start":1,
"end":300
}
}
该搜索模板编译后等同于:
GET /music/children/_search
{
"query": {
"range": {
"likes": {
"gte": 1,
"lte": 300
}
}
}
}
条件判断
在Mustache语言中,它没有if/else这样的判断,但是你可以定section来跳过它如果那个变量是false还是没有被定义
{
{
#param1}}
"This section is skipped if param1 is null or false"
{
{
/param1}}
示例:创建mustache scripts对象
POST _scripts/condition
{
"script": {
"lang": "mustache",
"source":
"""
{
"query": {
"bool": {
"must": {
"match": {
"name": "{
{name}}"
}
},
"filter":{
{
{
#isLike}}
"range":{
"likes":{
{
{
#start}}
"gte":"{
{start}}"
{
{
#end}},{
{
/end}}
{
{
/start}}
{
{
#end}}
"lte":"{
{end}}"
{
{
/end}}
}
}
{
{
/isLike}}
}
}
}
}
"""
}
}
使用mustache template查询:
GET _search/template
{
"id": "condition",
"params": {
"name":"gymbo",
"isLike":true,
"start":1,
"end":

本文介绍了Elasticsearch的高级功能,包括搜索模板的参数替换、Json条件查询、join语法及默认值设置,定制映射模板的动态映射效果,以及高亮搜索的基本语法和自定义标签。此外,还讲解了地理位置搜索,如geo_point类型、geo_bounding_box、geo_distance等查询方法,展示了如何在Elasticsearch中实现基于地理位置的搜索功能。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



