IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> elasticsearch中DSL之Full text queries(全文搜索) -> 正文阅读

[大数据]elasticsearch中DSL之Full text queries(全文搜索)

全文搜索

全文搜索是应用到字段类型为text上的搜索,也是es重要特性,es会根据字段的分词器算法,把字段进行解析,根据解析后的结果在es服务器中利用倒排索引算法,获取多个文档,并给出相应的得分。

搜索和过滤的区别

  • 搜索要给出每个文档得分
  • 过滤不计算每个文档得分,而且过滤会把数据缓存起来。

全匹配

全部匹配,每个文档得分都是1

GET myindex/_search
{
    "query": {
        "match_all": {   
        }
    }
}

全部不匹配

GET myindex/_search
{
    "query": {
        "match_none": {   
        }
    }
}

1.Match Query

match是只要文档包含任何一个分词,都要返回(分词间没有顺序依赖)
match是一个布尔查询,可能这句话不太了解这句话的含义。这是因为通常我们看到的查询语句的写法是下例:

GET myindex/_search
{
    "query": {
        "match": {
           "addr":"hangzhou shenzhen"
        }
    }
}

其实上面的简写的语法,真正的语法格式是下面:

GET myindex/_search
{
    "query": {
        "match": {
           "addr": {
               "query" :"hangzhou shenzhen",
               "operator" : "or"
           }
        }
    }
}

所以match有很多属性,就是在这里定义的,上例表示addr只要有hangzhou,shenzhen任何一个词元都要返回文档。
响应的结果:

"hits": {
      "total": 2,
      "max_score": 0.25316024,
      "hits": [
         {
            "_index": "myindex",
            "_type": "mytype",
            "_id": "2",
            "_score": 0.25316024,
            "_source": {
               "name": "mahuateng",
               "age": "40",
               "addr": "zhongguo guangdong shenzhen",
               "city": "shenzhen"
            }
         },
         {
            "_index": "myindex",
            "_type": "mytype",
            "_id": "1",
            "_score": 0.25316024,
            "_source": {
               "name": "mayun",
               "age": "43",
               "addr": "zhongguo zhejiang hangzhou",
               "city": "hangzhou"
            }
         }
      ]
   }

如果把"operator" : "or"改为"operator" : "and"则不会返回文档。
同样还有很多其他的属性:

  • query:实际被解析的语句
  • operator:操作符,“and” 或者 “or”,默认是"or"
  • lenient:布尔值,默认false,表示格式配置失败是否失败(例如用字符串查整型字段)
  • minimum_should_match:或逻辑,最小要匹配几个逻辑
  • analyzer:分词器
  • zero_terms_query : 文档只有停顿词,是否返回,默认是none, 还有all
  • max_expansions:是指可以扩展最大通配符个数。
  • fuzziness:设置模糊性,默认是AUTO
    还有很多其他的属性,就不介绍了

下面重点说下fuzziness模糊性的用法,因为对于英文语法有词根,词缀的语法,所以一个单词可以有多种变形,所以模糊性搜索就变得很常用了。(对于中文这种用法就没用了)
根据官网解释:
fuzziness is interpreted as a Levenshtein Edit Distance?—?the number of one character changes that need to be made to one string to make it the same as another string.就是从一个单词变成另一个单词需要编辑的次数。

fuzziness有两种表示方式:

  • 0 或 1 或 2,表示编辑距离(可以大于2,但是和2作用一样)
  • AUTO :是一个算法。
    目标单词长度为 0 到 2 之间时,必须要精确匹配
    目标单词长度为 3 到 5 之间时,最大编辑距离为 1
    目标单词长度大于5,最大编辑距离为 2
    举个栗子:用said去查say是查不到的,因为最大编辑距离是2才能找到。
  • 另外还可以设置前缀不能模糊的长度prefix_length

match最基础的全文索引语法,所以其他的语法,都是在此基础上扩展的。(通过使用不同的参数可以构建其他的检索语法)

2.Match Phrase Query


3.Match Phrase Prefix Query

4.Multi Match Query

5.Common Terms Query

6.Query String Query

7.Simple Query String Query

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 09:53:50  更:2021-08-06 09:54:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 5:04:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码