带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(16)

简介: 带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(16)


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(15) https://developer.aliyun.com/article/1229924


4.8 intervals

 

这是一种根据匹配的 term 的顺序和相似度返回文档的一种方法。

 

intervals 查询根据一些定义的匹配规则,来查询某个字段与词项一致的 tokens 是否符合规则组合排序。主要根据词项的顺序和间隔来组装规则。

使用方法:

POST _search
{
  "query": {
    "intervals" : {
      "my_text" : {
        "all_of" : {
          "ordered" : true,
          "intervals" : [
            {
              "match" : {
                "query" : "my favorite food",
                "max_gaps" : 0,
                "ordered" : true
              }
            },
            {
              "any_of" : {
                "intervals" : [
                  { "match" : { "query" : "hot water" } },
                  { "match" : { "query" : "cold porridge" } }
                ]
              }
            }
          ]
        }
      }
    }
  }
}

上面的查询要求在 my_text 字段先无间隔按照词项顺序匹配出 my favorite food 的文档,再去查询符合 hot water 或者 cold porridge 的文档。

 

intervals方法对各个查询场景的类型如下:

 

l match:普通的 match 场景。

l prefix:前缀匹配查询。

l wildcard:使用贪婪匹配查询。

l fuzzy:模糊匹配查询。

l all_of:返回全部满足子查询的条件的文档。

l any_of:返回任意满足一个子查询条件的文档。

l filter:为其它 intervals 查询添加规则条件。

 

在 intervals 方法中主要有下面几个特定参数可以选择:

 

1、max_gaps: 词项间最大的位置距离,比这个距离更远的词项则认为不匹配,默认是 -1。设置为 -1 则是没有距离限制,设置为 0 则是词项必须相邻出现。用于 match、all_of 类型。

2、ordered: 默认 false,如果为 true,则词项必须按照顺序出现。用于 match、all_of 类型。

 

对于 filter 类型主要是相关条件的关系判断,有 after/before/contained_by/containing/not_contained_by/not_containing/not_overlapping/overlapping/script.

 

查询字段的数量限制:在 combined_fields 查询中,这个查询字段的限制受制于查询逻辑中产生的组合字段与词项匹配出的子查询数量。

 

与 multi_match 的比较:

 

1、在查询效果上 combined_fields 与 cross_fields 的效果是一致的。

2、combined_fields 只能查询相同分词器的字段,如果有不同的分词器

 

5 实现精确搜索

 

在之前的内容中,主要介绍了 ES 对文本内容基于全文搜索的主要方法,也是全文搜索的场景。

那么,对于文本内容,ES 是否可以做到精确搜索呢?比如:查询 "The quick brown fox" 只

返回 "The quick brown fox" 这个文档,其余文档均不会返回。

 

答案是使用 term 对 keyword 字段进行查询。当然 match 也是可以的。

 

我们来看下面例子:

 

首先,索引一些实验数据:


PUT exact-search
POST exact-search/_mapping
{"properties":{"title":{"type":"keyword"}}}
POST exact-search/_bulk
{ "index": { "_id": 1 }}
{ "title": "The quick brown fox" }
{ "index": { "_id": 2 }}
{ "title": "The quick brown fox jumps over the lazy dog" }
{ "index": { "_id": 3 }}
{ "title": "The quick brown fox jumps over the quick dog" }
{ "index": { "_id": 4 }}
{ "title": "Brown fox brown dog" }

然后,使用 term 查询“The quick brown fox”。


GET exact-search/_search
{
  "query": {
"term": {
      "title": {
        "value": "The quick brown fox"
      }
    }
  }
}


查询逻辑如下:

 

1、字段类型为 keyword,不会因为分词的过程导致各种 token 的形成,因此倒排索引中的

token 即文本本身。

2、使用 term 查询,被查询的内容不会被分词,"The quick brown fox" 不会形成 "The "、"quick"、"brown"、"fox" 这些词项,被搜索文本内容即词项本身。

3、词项匹配只有文档 1 符合条件。

 

因此,查询结果只有文档 1.


 {
        "_index" : "exact-search",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.2039728,
        "_source" : {
          "title" : "The quick brown fox"
        }

6 思考和总结

 

1、在磁盘允许的情况下,多字段设置 keyword 和 text 可以更方便的查询。

2、对于日常文档搜索,match_phrase 相比 match 可能更加实用,但是 match 和 multi_match 则能满足更多的使用场景。

3、对于搜索查询没有达到预期匹配的情况,可以多使用 _analyze API 进行解析查看词项的分词情况。

 

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
AIGC的技术架构
【1月更文挑战第18天】AIGC的技术架构
1081 1
AIGC的技术架构
|
1天前
|
数据采集 人工智能 安全
|
10天前
|
云安全 监控 安全
|
2天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
904 150
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1642 8
|
6天前
|
人工智能 前端开发 文件存储
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择
星哥带你玩转飞牛NAS,部署开源笔记TriliumNext!支持树状知识库、多端同步、AI摘要与代码高亮,数据自主可控,打造个人“第二大脑”。高效玩家的新选择,轻松搭建专属知识管理体系。
364 152
|
7天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
600 152
|
9天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
561 13
|
2天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话

热门文章

最新文章