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. MAC - PhpStorm安装调试环境xdebug

    今天下午一直在捣鼓如何用PhpStorm进行调试,查找了许多资料,零零碎碎的,所以自己弄篇文章记录一下步骤. 安装xdebug 使用brew安装xdebug,语法如下 brew install hom ...

  2. HDU 5242 Game(三个贪心)

    Game Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. Problem O

    Problem Description Before bridges were common, ferries were used to transport cars across rivers. R ...

  4. awk练习题

    1. sed和awk有什么区别? (1)awk:按列(域)操作:sed:按行操作 (2)awk:文本处理语言,适合对文本进行抽取处理:sed:非交互式的编辑器,适合对文本进行编辑 2. awk要处理域 ...

  5. Nginx详解以及LNMP的搭建

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  6. 树莓派配置允许WINDOWS远程桌面 x11nvc+xrdp

    20171109 网上很多设置教程都比较老旧,于是自己整理一下顺便分享下 开启SSH后,使用PUTTY连接. 安装x11vnc sudo apt-get install x11vnc 设置密码 sud ...

  7. 关于ThinkPHP中的时间自动填充

    <?php class NewsModel extends Model{ protected $_auto = array( array('time_at','mydate','1','call ...

  8. JavaScript系列-----对象基于哈希存储(<Key,Value>之Key篇) (1)

    1.Hash表的结构 首先,允许我们花一点时间来简单介绍hash表. 1.什么是hash表 hash表是一种二维结构,管理着一对对<Key,Value>这样的键值对,Hash表的结构如下图 ...

  9. 系统学习DOM事件机制

    本文将从以下几个方面介绍DOM事件: 基本概念:DOM事件的级别 DOM事件模型,事件流 描述DOM事件捕获的具体流程 Event对象的常见应用 自定义事件 DOM事件的级别 //DOM0 eleme ...

  10. source is null for getProperty(null, "cpmodel")异常结局

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderExce ...