网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

这篇具有很好参考价值的文章主要介绍了网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章参考网上的课程,介绍Elasticsearch搜索引擎之自动补全功能的介绍与使用,这块内容不作为面试中的重点。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”
以下正文开始

网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

拼音分词器

当我们再很多网站输入拼音,关键字时,会出现商品,词语,与之有关联的的自动补全功能,可以帮助用户搜索到自己想要的结果。

Elasticsearch恰好能帮助我们完成这一业务。想要使用拼音来搜索商品,就需要使用拼音分词,根据字母做补全功能,就需要对文档按照拼音来分词。

首先我们需要安装拼音分词插件,将拼音分词插件下载到挂载的es-plugins目录下。下载完成后,我们可以测试一下是否可以,DSL代码如下:

POST /_analyze
{
  "text": ["小威要向诸佬学习呀"],
  "analyzer": "pinyin"
}

发送请求可以看到确实是按照拼音分词得到的结果,在创建索引库的时候可以以拼音分词的形式来创建:
网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

自定义分词器

上面我们演示了使用拼音来做分词,但是上面是根据单个和组合的拼音来做分词的。在生产环境中,我们往往需要以拼音和汉字词语一起作为分词,这就需要我们来自定义分词器了。

elasticsearch中分词器(analyzer)的组成包含三部分:

  • character filters:在tokenizer之前对文本进行处理。例如删除字符、替换字符
  • tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart
  • tokenizer filter:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等

网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”我们可以在创建索引库时,通过settings来配置自定义的分词器(analyzer):

// 自定义拼音分词器
PUT /test
{
  "settings": {
    "analysis": {
      "analyzer": { 
        "my_analyzer": { 
          "tokenizer": "ik_max_word",
          "filter": "py"
        }
      },
      "filter": { //自定义tokenizer filter
        "py": { //过滤器名称
          "type": "pinyin", //过滤器类型为pinyin
          "keep_full_pinyin": false,
          "keep_joined_full_pinyin": true,
          "keep_original": true,
          "limit_first_letter_length": 16,
          "remove_duplicated_term": true,
          "none_chinese_pinyin_tokenize": false
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
        "analyzer": "my_analyzer"//分词使用自定义分词器
        , "search_analyzer": "ik_smart"//搜索使用ik分词器
      }
    }
  }
}

在上面创建的索引库中放入两条文档:

{
  "id": 1,
  "name": "狮子"
}
POST /test/_doc/2
{
  "id": 2,
  "name": "虱子"
}

网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”
由于搜索时设置的根据ik_smart分词器进行分词,所以搜索结果只有狮子一条:
网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

为了避免搜索到同音字,在创建索引库是时使用拼音分词器,在搜索时尽量不用。
网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

completion suggester

es提供了completion suggester查询来实现自动补全功能,这个查询的概念就是匹配用户输入内容开头的词条并返回,对于文档中字段的类型,要遵循:参与补全查询的字段必须是completion类型;并且字段值是多个词条形成的数组。
举个栗子:
第一步,创建自动补全的索引库

# 创建自动补全的索引库
PUT test2
{
  "mappings": {
    "properties": {
      "title":{
        "type": "completion"
      }
    }
  }
}

第二步,在创建的索引库中插入几条补全数据:

# 示例数据
POST test2/_doc
{
  "title": ["Sony", "WH-1000XM3"]
}
POST test2/_doc
{
  "title": ["SK-II", "PITERA"]
}
POST test2/_doc
{
  "title": ["Nintendo", "switch"]
}

第三步,编写DSL语句,实现自动补全功能:

# 自动补全查询
POST /test/_search
{
  "suggest": {
    "title_suggest": {
      "text": "s", // 搜索关键字s开头的数据
      "completion": {
        "field": "title", // 补全字段
        "skip_duplicates": true, // 跳过重复的
        "size": 10 // 获取前10条结果
      }
    }
  }
}

执行上述的DSL语句,得到如下查询结果:
网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

图书推荐

本期推荐阅读书籍,鳄鱼书:《 健壮的Python》

《 健壮的Python》,英文原书名为《Robust Python》,顾名思义,就是教我们如何写出更加“健壮”的代码,不易出错,且能长时间的进行修改和维护。Python 本身的语法和概念非常简单,很多人甚至都觉得这是一门不需要刻意学习的语言(相比 Rust,Scala 等)。但看了这本书才发现原来写出高质量的工程代码有这么多的讲究!
网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

在这本实用的书中,作者Patrick Viafore将告诉你如何大限度地使用 Python的类型系统。你将看到用户定义的类型(如类和枚举),以及Python的类型提示系统。你还将学习如何使Python代码具有可扩展性,以及如何基于一个全面的测试策略构建安全网。利用这些知识和技术,你将编写更清晰、更易于维护的代码。

阅读收获

通过学习本书,你将:

  • 了解为什么类型在现代开发生态系统中是必不可少的。
  • 了解类、字典和枚举等类型选择是如何反映特定意图的。
  • 在不加剧臃肿的情况下使Python代码在未来可扩展。
  • 使用流行的Python工具来提高代码库的安全性和健壮性。
  • 评估当前的代码以检测常见的可维护性问题。
  • 通过linter和测试构建代码库的安全网。

本书结构

本书涵盖了非常广泛的知识,主要分为四个部分:

  • 第1部分“为代码添加类型注解”。介绍类型检查如何在保证健壮性的工作中扮演重要角色。

我们将从 Python 中的类型开始。类型是语言的基础,但开发人员往往没有对其进行详细检查。开发人员选择的类型很重要,因为它们传达了非常具体的意图。我们将介绍类型注解以及要与开发人员沟通的具体注解。我们还将介绍类型检查器以及它们是如何帮助开发人员在早期捕获 bug 的。

  • 第2部分“定义你自己的类型”。用面向对象的思维增加代码的健壮性。

在介绍了如何考虑Python 的类型之后,我们将重点关注如何创建自己的类型。我们将深人讨论枚举、数据类和类,并探讨在设计类型时特定的选择会如何增加或减少代码的健壮性。

  • 第3部分“可扩展的Python”。借助一些设计思想和常见架构,进一步提升代码质量。

在学习了如何更好地表达你的意图之后,我们将重点关注如何使开发人员能够轻松地更改你的代码,并在你的基础上充满信心地构建代码。我们将讨论可扩展性、依赖关系和架构模式方面的问题,这些方面使你可以在最小的影响下修改系统。

  • 第4部分“构建安全网”。用静态检查和测试完善整个代码的安全网。

最后,我们特探讨如何构建一个安全网,这样你說可以在未来的合作者失误时招助他们。他们的信心会因此而增强,因为他们会知道自己有一个强大的、健壮的系统,可以无所畏俱地用于他们的用例。最后,我们将介绍各种静志分析和测试工具,它们将帮助你捕获惡意的行为。

读者得以从四个不同的角度了解各种Python技巧,并借助其中的例子加强“编写良好代码”(不只是Python)的意识。每一章基本上都是独立的,你既可以按照顺片从头到尾问读,也可以根据自己的需求阅读相应的章节。各部分中的章节相互关联,但各个部分之间的关联较少。所有代码示例都是用 Python 3.9.0 运行。

希望阅读此书的读者都能有所收获,并能够将其中一些做法或者思想应用到自己的职业生涯或者编码工作中。

京东购买链接:点击了解

评论区任意留言可参与活动抽奖(评论最多三条,抽取四名欧皇)

好了,本篇文章就先分享到这里了,后续会继续分享其他方面的知识,感谢大佬认真读完支持咯~
网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”文章来源地址https://www.toymoban.com/news/detail-413835.html

到了这里,关于网页搜索自动补全功能如何实现,Elasticsearch来祝佬“一臂之力”的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch(ES)分布式搜索引擎04——(数据聚合,自动补全,数据同步,ES集群)

    **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些统计功能的比数据库的sql要方便的多,而且查询速度非常快,可以实现近

    2024年02月08日
    浏览(39)
  • 微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群 Sentinel

    聚合(aggregations)可以让我们极其 方便的实现对数据的统计、分析、运算 。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些 统计功能的比数据库的sql要方便的多,而且查询速度非常快 ,可以实现近

    2024年02月11日
    浏览(37)
  • 微服务04 分布式搜索引擎 elasticsearch DSL数据聚合 自动补全 数据同步 集群 微服务保护 Sentinel

    聚合(aggregations)可以让我们极其 方便的实现对数据的统计、分析、运算 。例如: 什么品牌的手机最受欢迎? 这些手机的平均价格、最高价格、最低价格? 这些手机每月的销售情况如何? 实现这些 统计功能的比数据库的sql要方便的多,而且查询速度非常快 ,可以实现近

    2024年02月15日
    浏览(42)
  • Elasticsearch实现检索词自动补全(检索词补全,自动纠错,拼音补全,繁简转换) 包含demo

    下面的请求定义了一个名为 “book” 的 Elasticsearch 索引,其中包含一个 具有 “text” 数据类型和 “standard” 分析器且名为 “title” 的字段。此字段用于处理书籍标题的文本数据。定义了名为 “suggest” 的 “completion” 子字段,用于支持实时搜索建议的自动补全功能。 增加测

    2024年02月07日
    浏览(29)
  • Elasticsearch 系列(四)- DSL实现自动补全查询

    本章将和大家分享如何通过 Elasticsearch 实现自动补全查询功能。 1、自动补全需求说明 当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项,如图: 2、使用拼音分词 要实现根据字母做补全,就必须对文档按照拼音分词。在 GitHub 上恰好有 Elasticsearch 的 拼音分

    2024年03月17日
    浏览(33)
  • Cube IDE 实现自动代码补全功能

    总所周知,我们使用的 Cube IDE 虽然有代码自动补全功能,但是需要通过快捷键 alt + / 来激活代码补全功能,并不能很友好提高开发效率。但是,我们可以通过安装插件来实现自动代码补全功能,具体实现方式如下 测试环境使用的是 Cube IDE v1.11.2 版本 打开菜单栏上的 Help-Ins

    2024年02月03日
    浏览(42)
  • 【ElasticSearch】ES自动补全查询与Java接口实现

    自动补全就是当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项。 要实现根据字母做补全,就必须对文档按照拼音分词。GitHub上有相关插件,地址:https://github.com/medcl/elasticsearch-analysis-pinyin,下载和ES对应的版本。 安装步骤: 解压 上传到虚拟机中,elasti

    2024年02月15日
    浏览(31)
  • elasticsearch的搜索补全提示

    当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项 要实现根据字母做补全,就必须对文档按照拼音分词,GitHub上有拼音分词插件 GitHub - medcl/elasticsearch-analysis-pinyin: This Pinyin Analysis plugin is used to do conversion between Chinese characters and Pinyin. 解压到一个文件夹中去

    2024年02月10日
    浏览(28)
  • 【Docker】如何实现Docker 命令自动补全

    Docker 命令可以使用 tab 键补全。在命令行输入 Docker 命令时,只需输入前几个字符,然后按 Tab 键即可自动补全为正确的命令或参数。 例如,在命令行输入 docker r,然后按 Tab 键,就会自动补全为 docker run 命令。如果有多个以 r 开头的命令或参数,按第二次 Tab 键则会显示所有

    2024年02月07日
    浏览(31)
  • 如何实现自动化按图片搜索淘宝商品(拍立淘)功能?拍立淘API接口item_search_img

    我们都知道淘宝平台推出了拍立淘功能,如果大家遇到了自己喜欢的商品,就可以拍一张照片,在淘宝用拍立淘搜索就能够出现相似的同款,这样就不用再去找别人要链接了。淘宝拍立淘主要是通过图片识别来找相似主图的宝贝,那么第三方软件如何实现批量按图片搜索淘宝

    2024年02月01日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包