ElasticSearch 系列文章

1 ES 入门之一 安装ElasticSearcha

2 ES 记录之如何创建一个索引映射

3 ElasticSearch 学习记录之Text keyword 两种基本类型区别

4 ES 入门记录之 match和term查询的区别

5 ElasticSearch 学习记录之ES几种常见的聚合操作

6 ElasticSearch 学习记录之父子结构的查询

7 ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

8 ElasticSearch 学习记录之ES高亮搜索

9 ElasticSearch 学习记录之ES短语匹配基本用法

10 ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

11 ElasticSearch 学习记录之集群分片内部原理

12 ElasticSearch 学习记录之ES如何操作Lucene段

13 ElasticSearch 学习记录之如任何设计可扩容的索引结构

14 ElasticSearch之 控制相关度原理讲解

短语匹配

短语匹配故名思意就是对分词后的短语就是匹配,而不是仅仅对单独的单词进行匹配

下面就是根据下面的脚本例子来看整个短语匹配的有哪些作用和优点

GET /my_index/my_type/_search
{
"query": {
"match_phrase": {
"title": "quick brown fox"
}
}
}
//查询分词之后连续的
//例如 brown fox 可以查询到,但是quick fox 查询不到
//也可以使用下面的方式,这两种方式是相同的,只不过写法不同而已 POST /product/_search
{
"query": {
"match": {
"name":{
"query": "1130 对接",
"type": "phrase"
}
}
}
}

根据上面的我们对短语匹配有些总结

  1. quick 、 brown 和 fox 需要全部出现在域中
  2. brown 的位置应该比 quick 的位置大 1
  3. fox 的位置应该比 quick 的位置大 2
  4. 上面任何一个选项不成立,则该文档不能认定为匹配

对 短语查询进行一些优化

通过加入slop参数,可以灵活的控制短语查询的,

slop 参数告诉 match_phrase 查询词条相隔多远时仍然能将文档视为匹配

POST product/_search
{
"query": {
"match_phrase": {
"name": {
"query": "1130 对接 测试",
"slop" : 10
}
}
}
}

越近越好,当我们给一个短语查询设置了很高的额slop时,就像下面这样

POST product/_search
{
"query": {
"match_phrase": {
"name": {
"query": " 上海 自由行",
"slop" : 100
}
}
}
}
//但是虽然我们给了很高的slop值,我们可以根据返回的score分数值来进行判断几个字段是否更加的临近。
部分匹配
  • prefix 前缀查询

    前缀查询,就是将一个词从头开始查。 例如某个数据是上海一日游 可利用前缀查询查询 上海

      POST /product/_search
    {
    "query": {
    "prefix": {
    "departureCitys": {
    "value": "上"
    }

    }
    }

prefix 前缀查询,不会在搜索的时候分析字符串,它假定传入的字符串就是正要查询的前缀

**默认状态下, prefix 查询不做相关度评分计算,它只是将所有匹配的文档返回,并为每条结果赋予评分值 1 **

  • 前缀搜索的步骤

    1. 扫描词列表,并查找第一个关键词
    2. 收集关联的文档id
    3. 移动到下一个词。
    4. 如果这个词也是以 关键字开头,查询跳回到第二步再重复执行,直到下一个词不以关键字 为止。
Elasticsearch - 理解字段分析过程(_analyze与_explain)
  • _explain 用来帮助分析文档的relevance score是如何计算出来

    1. GET /product/_analyze?text="自由行", 使用默认的额analyze来分析自由行
    2. 指定的analyzer来分析 例如 GET /product/_analyze ?analyzer=pinyin_analyzer&text=" 自由行"
    3. 指定field的analyzer来分析 GET /product/_analyze?field=base.name&text=" 自由行"
  • _analyze用来分析每一个field或者某个analyzer/tokenizer是如何分析和索引一段文字

    1. 使用_explain向ElasticSearch询问庆于该文档是如何匹配(或者没有匹配上)的解释信息
      	POST /product/_search
    {
    "explain": true,
    "size": 1,
    "query": {
    "match": {
    "name": "三亚"
    }
    }
    }
查询时输入即搜索

match_phrase_prefix 查询, 短语查询和前缀查询的组合

GET /product/_search
{
"query": {
"match_phrase_prefix": {
"name": {
"query": "上 海",
"slop" : 20,
"max_expansions": 50
}
}
}
}

slop 来使整个词序位置不是那么的严格

参数 max_expansions 控制着可以与前缀匹配的词的数量

Elasticsearch进行search查询的过程中,出现了Result window is too large错误
- ES默认窗口10000。可以用修改index.max_result_window参数来解决问题
- curl -XPUT http://127.0.0.1:9200/product/_settings -d '{ "index" : { "max_result_window" : 100000}}'

ElasticSearch 学习记录之ES短语匹配基本用法的更多相关文章

  1. ElasticSearch 学习记录之ES几种常见的聚合操作

    ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...

  2. ElasticSearch 学习记录之ES高亮搜索

    高亮搜索 ES 通过在查询的时候可以在查询之后的字段数据加上html 标签字段,使文档在在web 界面上显示的时候是由颜色或者字体格式的 GET /product/_search { "si ...

  3. ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

    ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...

  4. ElasticSearch 学习记录之ES如何操作Lucene段

    近实时搜索 提交(Commiting)一个新的段到磁盘需要一个 fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据.但是每次提交的一个新的段都fsync 这样操作代价过大.可以使用 ...

  5. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

  6. ElasticSearch 学习记录之如任何设计可扩容的索引结构

    扩容设计 扩容的单元 一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合 一个分片即为 扩容的单元 . 一个最小的索引拥有一个分片. 一个只有一个分片的索引 ...

  7. ElasticSearch 学习记录之父子结构的查询

    父子结构 父亲type属性查询子type 的类型 父子结构的查询,可以通过父亲类型的字段,查询出子类型的索引信息 POST /product/_search { "query": ...

  8. ElasticSearch 学习记录之Text keyword 两种基本类型区别

    ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...

  9. Elasticsearch学习记录(入门篇)

    Elasticsearch学习记录(入门篇) 1. Elasticsearch的请求与结果 请求结构 curl -X<VERB> '<PROTOCOL>://<HOST& ...

随机推荐

  1. 一次线上Mysql数据库崩溃事故的记录

    文章简介 工作这几年,技术栈在不断更新,项目管理心得也增加了不少,写代码的速度也在提升,感觉很欣慰,毕竟是在一直进步,但是过程中也有许许多多的曲折,也踩过了数不尽的坑坑洼洼,从一个连百度都不知道用的萌 ...

  2. 利用JavaScript实现动态显示表格且对应改变按键的value值

    插入的代码并没有符合HTML5样式,只是为了实现利用JS动态显示表格,并且按键的value值会同时发生变化的功能. <!DOCTYPE > <html > <head&g ...

  3. PHP读取数据库表显示到前台

    <?php$username=$_GET['uid']; //获取一个值作为查询条件 $result=$db->query("select * from trip where a ...

  4. 初学者最易懂的git教程在这里!

    一.git简介: Linux创建了Linux,但是Linux的发展壮大是由世界各地的热心志愿者参与编写的?那么那么多份的代码是怎么合并的呢?之前是在2002年以前,世界各地的志愿者把源代码文件通过di ...

  5. .net ef core 领域设计代码转换(上篇)

    一.前言 .net core 2.0正式版已经发布几个月了,经过研究,决定把项目转移过来,新手的话可以先看一些官方介绍 传送门:https://docs.microsoft.com/zh-cn/dot ...

  6. day3--深入学习命令总结

    1.查看命令帮助的几种方法 a.[命令] --help   适用于一般命令,非内置命令 b.man  [命令]     适用于一般命令,非内置命令 c.help  [命令]     适用于内置命令 d ...

  7. 70、django之Ajax初识

    Ajax准么说是用于Javascript与服务器端进行交互的,我们之前呢没有了解ajax也同样可以完成与服务器的交互,那么ajax的优势在哪里?首先ajax是异步交互的也就是说我们基本不会遇到卡顿现象 ...

  8. Maven 浅谈一

    一.Maven的作用 在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们想到的是,难道还差 ...

  9. 清理win10过期补丁的命令

    作用是删除已经被新版本取代的旧系统文件 DISM.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase 注1: 执行后, 补丁就无法 ...

  10. linux7.2系统中安装Nmon并使用

    前提 安装linux系统中遇到一个问题,设置ip以后则ping不通,简单总结几步: 1.设置ip 进入 /etc/sysconfig/network-scripts目录下,修改文件名为ifcfg-en ...