全文搜索两个最重要的方面是:相关性, 分析。

一旦谈论相关性或分析这两个方面的问题时,我们所处的语境是关于查询的而不是过滤

match:单个词查询

GET /my_index/my_type/_search
{"query": {"match": {"title": "QUICK!"}}
}

步骤:1.分析字段类型,是string。2.分析查询字符串,得到一个单词quick。3.用term查询,在倒排索引中查找quick。4.为文档评分。

match:多个词查询

GET /my_index/my_type/_search
{"query": {"match": {"title": "BROWN DOG!"}}
}

match 查询必须查找两个词( ["brown","dog"] ),它在内部实际上先执行两次 term 查询,然后将两次查询的结果合并作为最终结果输出。

上面的查询,哪怕只有一个brown或者是一个dog也会匹配。

如果要求一定要同时出现brown和dog两个词,则需要operator操作符。

GET /my_index/my_type/_search
{"query": {"match": {"title": {      "query":    "BROWN DOG!","operator": "and"      #and表示两个必须都匹配,or表示匹配一个即可}}}
}

用minimum_should_match指定必须匹配的词项数。可以是百分比。

GET /my_index/my_type/_search
{"query": {"match": {"title": {"query":                "quick brown dog","minimum_should_match": "75%"}}}
}

组合查询:

GET /my_index/my_type/_search
{"query": {"bool": {"must":     { "match": { "title": "quick" }},"must_not": { "match": { "title": "lazy"  }},"should": [{ "match": { "title": "brown" }},{ "match": { "title": "dog"   }}]}}
}

should语句的条件不是必须满足的,但是如果满足,则会增加文档的分数,即认为其更相关。

可以用minimum_should_match限制必须满足should的条件数。

GET /my_index/my_type/_search
{"query": {"bool": {"should": [{ "match": { "title": "brown" }},{ "match": { "title": "fox"   }},{ "match": { "title": "dog"   }}],"minimum_should_match": 2 }}
}

下面的两个查询是等价的:

{"match": {"title": {"query":                "quick brown fox","minimum_should_match": "75%"}}
}

{"bool": {"should": [{ "term": { "title": "brown" }},{ "term": { "title": "fox"   }},{ "term": { "title": "quick" }}],"minimum_should_match": 2 }
}

下面两个查询等价:

{"match": {"title": {"query":    "brown fox","operator": "and"}}
}

{"bool": {"must": [{ "term": { "title": "brown" }},{ "term": { "title": "fox"   }}]}
}

用boost参数提高should条件的重要性。

我们想让包含 Lucene 的有更高的权重,并且包含 Elasticsearch 的语句比 Lucene 的权重更高

GET /_search
{"query": {"bool": {"must": {"match": {  "content": {"query":    "full text search","operator": "and"}}},"should": [{ "match": {"content": {"query": "Elasticsearch","boost": 3 }}},{ "match": {"content": {"query": "Lucene","boost": 2 }}}]}}
}

boost 参数被用来提升一个语句的相对权重( boost 值大于 1 )或降低相对权重( boost值处于 0 到 1 之间)

原文后面还介绍了分析器和数据过少时的相关度问题。

转载于:https://www.cnblogs.com/dplearning/p/6994424.html

【ES】学习5-全文搜索相关推荐

  1. 数据库-Elasticsearch进阶学习笔记(分片、映射、分词器、即时搜索、全文搜索等)

    目录 基础概念 定义 特点 索引(Index) 分片(Shards) 副本(Replicas) 分配(Allocation) 映射(Mapping) 动态映射 显式映射 常见数据类型 文档(docum ...

  2. 帝国CMS7.5基于es(Elasticsearch)7.x的全文搜索插件

    帝国CMS7.5基于es(Elasticsearch)7.x的全文搜索插件 - GXECMS博客 一.插件演示地址 后台演示地址:https://ecms.gxecms.cf/e/admin/inde ...

  3. ES 全文搜索与数据分析引擎

    ES 它是一个 分布式的 全文搜索与数据分析引擎. 与关系型数据库对比: 一个ES集群可以包含多个索引(数据库),每个索引又包含了很多类型(表),类型中包含了很多文档(行),每个文档使用 JSON 格 ...

  4. Java小白学习指南【day54】---luceneElasticSearch全文搜索

    文章目录 lucene&ES全文搜索 一.认识全文搜索引擎 1.什么是全文搜索 2.全文检索的特点 3.常见的全文索引 二.Lucene介绍 1.Lucene是什么 2.Lucene的核心 3 ...

  5. php全文搜索视频教程,【php启用sphinx全文搜索的实现要领】_PHP技巧_电脑技术学习,计算机学习网站,电脑维修技术教程,培训资料学习网-OAWHY...

    这篇文章主要介绍了<?php启用sphinx全文搜索的实现要领 ,详细讲述了sphinx相关的配置与使用技巧,具有必然的参考借鉴价值,需要的伴侣可以参考下 本文实例讲述了<?php启用sp ...

  6. 全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定

    转载自  全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定 摘自:JaJian`博кē Java后端技术编者说:文章从浅到深,描述了什么是全文搜索,为什么要使用全文搜索,Solr ...

  7. php中文搜索工具,Laravel 下 TNTSearch+jieba-PHP 实现中文全文搜索

    TNTSearch+jieba-php这套组合可以在不依赖第三方的情况下实现中文全文搜索: 特别的适合博客这种小项目: 开启php扩展 pdo_sqlite sqlite3 mbstring 开始: ...

  8. Java全文搜索怎么弄的_全文搜索 简介

    数据的分类 结构化数据 具有固定格式.有限⻓度的数据,一般用关系数据库来处理. 非结构化数据 全⽂数据,⽆固定格式.不定⻓,比如邮件.word⽂档内容. 非结构化数据的2种处理方式 顺序扫描 从前往后 ...

  9. ES学习一 工作原理

    ES(elasticsearch),基于Lucene的全文搜索工具,常用作关系型数据库查询优化方案.分布式log检索方案.而ES之所以快则是依赖于Lucene的倒排索引结构. 以下内容基于理论学习,未 ...

最新文章

  1. django学习教程
  2. 修改cpu型号重启不变_猫头鹰展示D系列新款140毫米CPU散热器:更大散热片,能压400瓦...
  3. css定位页面元素,页面元素定位-CSS元素基本定位
  4. JavaScript判断浏览器类型及版本
  5. [Machine Learning] Random Forest 随机森林
  6. 三元运算 三个数取最大的
  7. 【实操】Y7000P 2020款安装黑苹果完整步骤记录
  8. zzuliOJ 2536: 绿绿学姐与AI 1
  9. SQLI_LAB——Less7~15
  10. tomcat server.xml详细配置
  11. 前端-页面性能调试:Hiper
  12. MDK5 添加Device
  13. 14565B简单使用教程
  14. 100天精通Andriod逆向——第2天:Android基础知识和jadx的使用
  15. 08、SpringCloud 系列:Nacos - 安装、启动
  16. 小小weibo音乐播放器
  17. Dev GridView网格中格式化 TimeSpan
  18. 注解以及Java中常用注解使用
  19. javascript创建对象方法总结
  20. fatal: not in a git directory(Git)

热门文章

  1. CF788E:New task
  2. CSS3常用选择器(三)
  3. 一群喵星人把他家包围了。。
  4. 下载tomcat插件最新的网址
  5. Silverlight4 ColorPicker控件
  6. 类型的权限已失败 SqlClientPermission
  7. python输出所有素数_Python程序打印一个区间内所有质数
  8. 汽车软件开发的8种颠覆性趋势及国产自主可控的多领域全数字实时仿真平台SkyEye
  9. 计算机组成原理之磁盘
  10. YARN的服务库和事件库