模糊搜索

可以进行模糊搜索:

GET job/type1/_search
{
"query":{
"fuzzy":{
"title":{
"value":"linx",
"fuzziness": 2,
"prefix_length": 1
}
}
}
}

在上面的例子中,可模糊查询与linx相似的单词。

fuzziness是指“编辑距离”,就是说从一个字符串想要通过增删改变换到另一个字符串,需要操作的最少次数。比如,linux和linxu之间的编辑距离为1,因为交换ux就可以完成变换。

prefix_length是说多少位字符认为是前缀。前缀部分必须完全匹配。

搜索建议

搜索建议功能,需要配合程序,在向es中存入文档时,就需要通过分词等方式,指定搜索建议字段的内容。

指定之后,可通过suggest方式,根据用户的当前输入,获取搜索建议:

GET wechatsearch/passage/_search
{
"suggest":{
"my-suggest":{
"text":"ppt",
"completion":{
"field":"suggest",
"fuzzy":{
"fuzziness":2
}
}
}
},
"_source": "ptitle"
}

上面代码搜索出与ppt关键词相近的搜索建议。其中,fuzziness值为2,因此,像p2p、pdf之类的关键词也会被搜索出来。较小的fuzziness会有更精确的匹配。

返回结果示例:

{
"took": 20,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": 0,
"hits": []
},
"suggest": {
"my-suggest": [
{
"text": "ppt",
"offset": 0,
"length": 3,
"options": [
{
"text": "pdf",
"_index": "wechatsearch",
"_type": "passage",
"_id": "16",
"_score": 10,
"_source": {
"ptitle": "Smallpdf:无所不能的PDF在线处理站"
}
},
{
"text": "ppt",
"_index": "wechatsearch",
"_type": "passage",
"_id": "7",
"_score": 10,
"_source": {
"ptitle": "这18个技巧都不知道,别说你会做PPT"
}
},
{
"text": "pa",
"_index": "wechatsearch",
"_type": "passage",
"_id": "10",
"_score": 5,
"_source": {
"ptitle": "吐血整理了这20个堪称神器的网站,个个都能解你燃眉之急"
}
}
]
}
]
}
}

搜索高亮

可以指定哪些字段搜索高亮,并且指定高亮字符两侧的包裹标签,从而实现查询的返回结果包含html高亮效果。

GET /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight": {
"fields" : {
"about" : {}
}
}
}

注意,高亮的结果在返回时单独存放,并不是将_source数据做了改变。

单独有一个highlight部分存放高亮内容:

{
...
"hits": {
"total": 1,
"max_score": 0.23013961,
"hits": [
{
...
"_score": 0.23013961,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [ "sports", "music" ]
},
"highlight": {
"about": [
"I love to go <em>rock</em> <em>climbing</em>"
]
}
}
]
}
}

关于ES的入门使用暂时整理到这里。

ES的官方文档是最好的参考资料,介绍很全面。


完成这些文档的同时,做了一个简单的小项目,基于Python(Django)的web搜索界面,采用ES作为搜索引擎。

此项目地址:

https://github.com/dox1994/WechatSearch_Python

搜索提示:

搜索结果:

Elastic Search快速上手(4):细节补充的更多相关文章

  1. Elastic Search快速上手(1):简介及安装配置

    前言 最近开始尝试学习Elastic Search,因此决定做一些简单的整理,以供后续参考,快速上手使用ES. 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多 ...

  2. Elastic Search快速上手(2):将数据存入ES

    前言 在上手使用前,需要先了解一些基本的概念. 推荐 可以到 https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.htm ...

  3. Elastic Search快速上手(3):搜索

    前言 存储好数据之后,便可通过RESTful API进行搜索. 详细文档可参考: --简单搜索https://www.elastic.co/guide/cn/elasticsearch/guide/c ...

  4. Elastic Search快速入门

    https://blog.csdn.net/weixin_42633131/article/details/82902812 通过这个篇文章可以快速入门,快速搭建一个elastic search de ...

  5. socket网络编程快速上手(二)——细节问题(4)

    5.慢系统调用及EINTR 还记得前面readn和writen函数么?里面有个EINTR,现在就来谈谈这个,这个很重要. Linux世界有个叫信号的东西,感觉他就像一位隐士,很少遇到他,而他又无处不在 ...

  6. WebAPI调用笔记 ASP.NET CORE 学习之自定义异常处理 MySQL数据库查询优化建议 .NET操作XML文件之泛型集合的序列化与反序列化 Asp.Net Core 轻松学-多线程之Task快速上手 Asp.Net Core 轻松学-多线程之Task(补充)

    WebAPI调用笔记   前言 即时通信项目中初次调用OA接口遇到了一些问题,因为本人从业后几乎一直做CS端项目,一个简单的WebAPI调用居然浪费了不少时间,特此记录. 接口描述 首先说明一下,基于 ...

  7. socket网络编程快速上手(二)——细节问题(5)(完结篇)

    6.Connect的使用方式 前面提到,connect发生EINTR错误时,是不能重新启动的.那怎么办呢,是关闭套接字还是直接退出进程呢?如果EINTR前,三次握手已经发起,我们当然希望链路就此已经建 ...

  8. 简明易懂,将细节隐藏,面向新手树立web开发概念——学完Java基础语法,超快速上手springboot+mybatiJavaWeb开发

    简明易懂,将细节隐藏,面向新手树立web开发概念 --学完Java基础语法,超快速上手JavaWeb开发 Web本质(先忽视各种协议) Web应用可以理解为浏览器和服务器之间的交互. 我们可以看一个简 ...

  9. 快速上手RaphaelJS-Instant RaphaelJS Starter翻译(一)

       (目前发现一些文章被盗用的情况,我们将在每篇文章前面添加原文地址,本文源地址:http://www.cnblogs.com/idealer3d/p/Instant_RaphaelJS_Start ...

随机推荐

  1. 异步机制 - ReadFileEx(WriteFileEx)

    1 ReadFileEx定义 BOOL WINAPI ReadFileEx( __in HANDLE hFile, __out LPVOID lpBuffer, __in DWORD nNumberO ...

  2. 互联网IT当线上出现 bug 时,是怎么处理的?

    线上BUG说处理方法:1.关于线上BUG问题,目前公司有一整套线上故障流程规范,包括故障定义.定级.处理流程.故障处理超时升级机制.故障处理小组.故障处罚(与故障存在时长有关)等:2.最主要的是,线上 ...

  3. 【Phoenix】1、搭建 Phoenix 环境

    Ps: 需要注意的是,我学习的时候,Elixir 是 1.8.1的版本,而 Phoenix 是 1.4.1的版本,对于其他版本,不一定正确. 1.安装 Phoenix 之前,先安装 Elixir. 2 ...

  4. git仓库与项目源码分离

    在服务器上初始化git仓库 cd mkdir gitrepo cd gitrepo git init --bare runoob.git 本地 若是已经有git项目了,直接添加一个仓库地址就行了 gi ...

  5. Docker-compose的安装和使用

    一.简介 Compose 项目 是 Docker 官方的开源项目 , 负 责实 现对 Docker 容器 集群的快速编排,其前身 是开源项目 Fig, 目前仍然兼容 Fig格式的模板文件. 使用 一个 ...

  6. Swiper轮播插件使用

    前文 Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端,能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果.                 归根到此,Swi ...

  7. QPixmap QImage 相互转化

    QPainter p(this); QPixmap pixmap; pixmap.load("E:\\参考文件\\image\\1.jpg"); //QPixmap->QIm ...

  8. 无法登录到Windows云服务器怎么办?

    当您的云服务器无法远程登录时,我们首先建议您使用VNC方式登录. 是否可以通过控制台远程登录 远程登录失败时,请首先尝试能否通过管理控制台,使用VNC方式登录弹性云服务器. 登录管理控制台. 选择“计 ...

  9. Java工程师学习指南第1部分:夯实Java基础系列

    点击关注上方"Java技术江湖",设为"置顶或星标",第一时间送达技术干货. 本文整理了微信公众号[Java技术江湖]发表和转载过的Java优质文章,想看到更多 ...

  10. 学习SpringBoot整合SSM三大框架源码之SpringBoot

    Spring Boot源码剖析 一.Spring Boot 项目的启动入口流程分析 Spring Boot项目的启动入口main线程上有一个@SpringBootApplication( @Confi ...