【 es搜索】
地图搜索实现:
①参数:
左下角经纬度和右上角经纬度
图层数(zoom)
关键字等各种数据库中的字段
排序方式
具体的坐标点+距离
②实现
a.用es作为关系库,首先先mapping所有的字段,然后用laravel命令把数据库中的数据导入到es中
b.收集前台参数
1.在矩形中查找:
- $es_geo['geo_bounding_box'] = array(
- 'location' => array(
- 'top_right' => array(
- 'lat' => $top_right_lat,
- 'lon' => $top_right_lon,
- ),
- 'bottom_left' => array(
- 'lat' => $bottom_left_lat,
- 'lon' => $bottom_left_lon,
- )
- ),
- );
- $params['body']['query']['bool']['filter'][] = $es_geo;
2.在圆形中查找
- $es_geo['geo_distance'] = array(
- 'distance' => '1000m',
- 'location' => array(
- 'lat' => $lat,
- 'lon' => $lng
- ),
- );
- $params['body']['query']['bool']['filter'][] = $es_geo;
c.缩放时的聚合
- $params['body']['aggs']['area_id'] = array(
- 'terms' => array(
- 'field' => 'area_id',
- 'size' => 100,
- )
- );
d.实例化es和查询
- $db_parameters = array(
- 'DB_DEBUG' => FALSE,
- 'ES_PARAM' => array('hosts' => array($es_host)),
- 'ES_INDEX' => $es_index,
- 'ES_TYPE' => $es_type,
- );
- $client = ClientBuilder::create()->setHosts($db_parameters['ES_PARAM']['hosts'])->build();
- $ret = $client->search($params);
e.缓存条件和结果到redis中
- $md5_key = ENCODE($params);//加密参数
- $redis->set($md5_key, json_encode($result), 1800);
③其他
- 更新es索引节点:
- curl -XPUT http://localhost:9200/es_index/_mapping/es_type -d'
- {
- "properties": {
- "xx": {
- "type": "integer"
- },
- "xx": {
- "type": "nested",
- 'properties' : {
- 'xx' : { "type": "integer" }
- }
- }
- }
- }'
【 es搜索】的更多相关文章
- ES搜索结果调优
访问我的博客 自从使用 ElasticSearch 重构了主站的搜索项目之后,之后又陆续接入了其他两个项目,目前使用 SpringBoot 方式跑了一个伪集群,主站使用的时候,比较稳定,没有人反馈说有 ...
- 从零搭建 ES 搜索服务(五)搜索结果高亮
一.前言 在实际使用中搜索结果中的关键词前端通常会以特殊形式展示,比如标记为红色使人一目了然.我们可以通过 ES 提供的高亮功能实现此效果. 二.代码实现 前文查询是通过一个继承 Elasticsea ...
- 从零搭建 ES 搜索服务(六)相关性排序优化
一.前言 上篇介绍了搜索结果高亮的实现方法,本篇主要介绍搜索结果相关性排序优化. 二.相关概念 2.1 排序 默认情况下,返回结果是按照「相关性」进行排序的--最相关的文档排在最前. 2.1.1 相关 ...
- 从零搭建 ES 搜索服务(二)基础搜索
一.前言 上篇介绍了 ES 的基本概念及环境搭建,本篇将结合实际需求介绍整个实现过程及核心代码. 二.安装 ES ik 分析器插件 2.1 ik 分析器简介 GitHub 地址:https://git ...
- 从零搭建 ES 搜索服务(三)同义词搜索
一.前言 上篇介绍了 ES 的基础搜索,能满足我们基本的需求,然而在实际使用中还可能希望搜索「番茄」能将包含「西红柿」的结果也罗列出来,本篇将介绍如何实现同义词之间的搜索. 二.安装 ES 同义词插件 ...
- 从零搭建 ES 搜索服务(四)拼音搜索
一.前言 上篇介绍了 ES 的同义词搜索,使我们的搜索更强大了,然而这还远远不够,在实际使用中还可能希望搜索「fanqie」能将包含「番茄」的结果也罗列出来,这就涉及到拼音搜索了,本篇将介绍如何具体实 ...
- ES搜索社区
好问题 1.比如我要索引的条目为“33分钟侦探”,我想在用户输入“3”.“33”.“三三”.“三十三”.“三十三分钟”等的情况下都命中该条目,请问有没有什么好的方式实现? PS:使用的是ansj分词器 ...
- 从零搭建ES搜索服务(一)基本概念及环境搭建
一.前言 本系列文章最终目标是为了快速搭建一个简易可用的搜索服务.方案并不一定是最优,但实现难度较低. 二.背景 近期公司在重构老系统,需求是要求知识库支持全文检索. 我们知道普通的数据库 like ...
- es 搜索功能简介
DSL 语法介绍 语法 范围 /_search 集群上搜索所有的索引 /index1/_search index1 /index1,index2/_search index1和index2 /inde ...
随机推荐
- 使用cocostudio 需要在Android.mk文件的配置
直接贴上Android.mk文件吧. 对了,是cocos2d3.0的,不知道2.x是否一样. LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LO ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn可用性组(理论篇)
因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...
- 【Leetcode】【Medium】Divide Two Integers
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...
- 使用UIWebView中html标签显示富文本
使用UIWebView中html标签显示富文本 用UIWebView来渲染文本并期望达到富文本的效果开销很大哦! Work 本人此处直接加载自定义字体"新蒂小丸子体",源码不公开, ...
- python 类属性及限制
Student类本身需要绑定一个属性直接在class中定义属性,这种属性是类属性,归Student类所有:class Student(object): name = 'Student'类的所有实例都可 ...
- 原生js实现类名(class)的增、删
先判断是否有这个类名: function hasClass( elements,cName ){ return !!elements.className.match( new RegExp( &q ...
- Android Studio使用GIt提交代码到本地仓库后没有Push,如何回退保存
当在AS中使用Git来提交代码时,有时候我们不注意的情况下会把不想提交的文件或文件夹(比如\build下的)提交到本地仓库,如果此时并没有Push到远程仓库的话.如果让本地仓库的提交回退并且保存之前的 ...
- 在前端页面展示Markdown文件
常我们都会在GitHub上浏览很多的readme文件,这些都是Markdown语法写成的Markdown文件,HTML中并没有用于展示Markdown文件的元素,那么为什么可以在前端展示呢? 有别于G ...
- 随滚动条滚动,始终处于屏幕的中间类似qq的浮动窗口 (能看到运动的过程)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Eclipse_java项目中导入外部jar文件
非常多时候,在java项目中须要导入外部 .jar文件.比方:须要导入数据库连接驱动等等一些包.不熟悉eclipse的人可能会犯愁,事实上非常easy. ...过程例如以下: 在须要加入外部文件的项 ...