首页 > 其他分享 >深入理解ElasticSearch与BM25: 实践与应用

深入理解ElasticSearch与BM25: 实践与应用

时间:2024-12-30 09:27:02浏览次数:3  
标签:BM25 实践 搜索引擎 文档 elasticsearch ElasticSearchBM25Retriever ElasticSearch

老铁们,今天我们来聊聊一个在搜索引擎领域备受关注的技术点——ElasticSearch中的BM25。说白了,这就是一个基于概率检索框架的文档排序算法,最初由Stephen E. Robertson和Karen Spärck Jones等高手在20世纪的70至80年代提出。BM25如今已成为许多搜索引擎的核心技术。

技术背景介绍

ElasticSearch作为一个分布式、RESTful的搜索与分析引擎,提供了多租户能力的全文搜索引擎,通过HTTP接口和schema-free JSON文档来进行数据交互。而BM25(Okapi BM25)是一种用于搜索引擎评估文档与给定查询相关性的排序函数。相比于传统的TF-IDF方法,BM25在处理不同长度的文档时表现更优。

原理深度解析

BM25基于概率检索模型,它在一定程度上解决了TF-IDF无法有效处理文档长度差异的问题。其公式通过调节参数b(文档长度正则化系数)和k1(词频平滑系数),来提高对不同规模文档的适应性。

实战代码演示

接下来,我们进入实战环节,使用ElasticSearch来实现BM25。首先,确保安装并升级了ElasticSearch的Python客户端:

%pip install --upgrade --quiet elasticsearch

然后,我们使用ElasticSearchBM25Retriever来创建一个新的检索器:

from langchain_community.retrievers import (
    ElasticSearchBM25Retriever,
)

elasticsearch_url = "http://localhost:9200"
retriever = ElasticSearchBM25Retriever.create(elasticsearch_url, "langchain-index-4")

如果我们已经有一个索引,可以直接加载:

# import elasticsearch
# retriever = ElasticSearchBM25Retriever(elasticsearch.Elasticsearch(elasticsearch_url), "langchain-index")

这下就可以开始操作了!如果需要添加文本,可以执行以下操作:

retriever.add_texts(["foo", "bar", "world", "hello", "foo bar"])

这波操作可以说是相当丝滑。添加文本后,我们就能进行检索:

result = retriever.invoke("foo")
print(result)

优化建议分享

在使用ElasticSearch与BM25时,有几点优化建议:首先,确保你的索引数据是标准化的,文档长度不同可能会影响BM25的效果。其次,适当调整b和k1参数,来优化排序效果。最后,考虑使用代理服务提高稳定性和查询效率。

补充说明和总结

我个人一直在用 https://yunwu.ai 提供的一站式大模型解决方案,帮助快速部署和管理ElasticSearch这样的搜索引擎。对于有更复杂需求的项目,这种服务可以显著简化开发流程。

今天的技术分享就到这里,希望对大家有帮助。开发过程中遇到问题也可以在评论区交流~

—END—

标签:BM25,实践,搜索引擎,文档,elasticsearch,ElasticSearchBM25Retriever,ElasticSearch
From: https://blog.csdn.net/dfitghjk/article/details/144798155

相关文章

  • 性能与一致性的平衡:深入解析同步与异步日志架构的最佳实践
    在分布式系统和高并发应用中,日志管理不仅是系统调试和故障排查的关键工具,也是性能监控、用户行为分析和安全审计的重要组成部分。然而,日志的记录和存储往往面临着性能与一致性之间的矛盾。在实际应用中,如何在保证系统性能的同时确保日志数据的一致性和完整性,成为架构设计中的......
  • 人工智能短视频内容理解与生成技术在美团的创新实践1
     1.背景美团围绕丰富的本地生活服务电商场景,积累了丰富的视频数据。美团场景下的短视频示例上面展示了美团业务场景下的一个菜品评论示例。可以看到,视频相较于文本和图像可以提供更加丰富的信息,创意菜“冰与火之歌”中火焰与巧克力和冰淇淋的动态交互,通过短视频形式进......
  • 人工智能短视频内容理解与生成技术在美团的创新实践4
     1.背景美团围绕丰富的本地生活服务电商场景,积累了丰富的视频数据。美团场景下的短视频示例上面展示了美团业务场景下的一个菜品评论示例。可以看到,视频相较于文本和图像可以提供更加丰富的信息,创意菜“冰与火之歌”中火焰与巧克力和冰淇淋的动态交互,通过短视频形式进......
  • 人工智能短视频内容理解与生成技术在美团的创新实践14
     1.背景美团围绕丰富的本地生活服务电商场景,积累了丰富的视频数据。美团场景下的短视频示例上面展示了美团业务场景下的一个菜品评论示例。可以看到,视频相较于文本和图像可以提供更加丰富的信息,创意菜“冰与火之歌”中火焰与巧克力和冰淇淋的动态交互,通过短视频形式进......
  • 软工实践个人总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315这个作业的目标完成作业学号022204045一、学期回顾1.1回顾你对于软件工程课程的想象根据你对课程目标和期......
  • 人工智能短视频内容理解与生成技术在美团的创新实践7
     1.背景美团围绕丰富的本地生活服务电商场景,积累了丰富的视频数据。美团场景下的短视频示例上面展示了美团业务场景下的一个菜品评论示例。可以看到,视频相较于文本和图像可以提供更加丰富的信息,创意菜“冰与火之歌”中火焰与巧克力和冰淇淋的动态交互,通过短视频形式进......
  • Java多线程实战避坑指南:从入门到生产实践
    在微服务架构下,多线程编程已经成为Java开发者的必备技能。本文将帮助你掌握多线程开发的核心知识,避开常见陷阱。一、为什么要深入理解多线程?1.1现实问题接口响应慢CPU利用率低内存泄漏频发死锁难以排查并发BUG难复现1.2业务场景批量数据处理并行任务执行......
  • 纸上得来终觉浅:一场实践与真知的旅程
    一、学期回顾1.1对于软件工程课程的想象在软件工程课开始之前,我曾经关于就业方面感到困惑不解,因为自己前两年在学校大部分学的都是理论知识,那么当我去参加工作,我要从事什么呢?学期初一位学姐告诉我,这学期的软件工程是一门很重要的课程,有很强的应用性,可以解答我的疑惑,所以我对......
  • 【亲手实践】本地multipass安装kubernetes,再也不怕环境被铲
    一、安装multipass 1.安装multipaas软件版本brewinstallmultipass 2.创建三个虚拟机master(192.168.64.6)、node1(192.168.64.14)、node2(192.168.64.15),2Gcpu+2G内存+40G硬盘,Qemu+桥连模式   $ multipassfind查找可用ubuntu版本,这里选择22.04这个版本   $ m......
  • 深入探讨 Nginx 性能优化:从基础到高级的最佳实践
    目录引言Nginx性能优化的意义Nginx性能优化的主要方向系统层面的优化4.1优化操作系统的文件描述符4.2调整TCP参数4.3使用高效的磁盘I/O调度器Nginx配置优化5.1优化worker进程和连接数5.2使用异步和非阻塞I/O模式5.3配置Gzip压缩5.4开启缓存和缓存控......