Elasticsearch:结合两全其美:Elasticsearch 与 BM25 和 HNSW 的混合搜索

这篇具有很好参考价值的文章主要介绍了Elasticsearch:结合两全其美:Elasticsearch 与 BM25 和 HNSW 的混合搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch:结合两全其美:Elasticsearch 与 BM25 和 HNSW 的混合搜索

就搜索算法而言,没有万能的解决方案。 不同的算法在不同的场景下效果更好,有时需要算法的组合才能达到最好的效果。 在 Elasticsearch 中,一种流行的组合搜索算法的方法是使用混合搜索,将用于文本搜索的 BM25 算法与用于最近邻搜索的 HNSW 算法相结合。 在这篇博文中,我们将探讨 Elasticsearch 中混合搜索的优势、挑战和用例。

BM25 是一种广泛用于文本搜索的算法,它根据查询中每个词的词频(TF)和逆向文档频率(IDF)计算分数。 正如我们在之前的博文中看到的,HNSW 是一种用于近似最近邻搜索的算法,它构建了一个由互连节点组成的小世界图。 通过结合这两种算法,我们可以执行结合两者优势的混合搜索。

混合搜索的最大挑战之一是平衡两种算法的权重。 换句话说,我们需要决定在组合它们时给 BM25 分数和给 HNSW 分数多少权重。 这可能很棘手,因为最佳权重可能会因数据和特定搜索场景而异。

但是,如果操作得当,混合搜索可以显着提高搜索准确性和效率。 例如,在电子商务应用程序中,混合搜索可用于将文本搜索与视觉搜索相结合,使用户能够找到与其文本和视觉查询相匹配的产品。 在科学应用中,混合搜索可用于将文本搜索与高维数据的相似性搜索相结合,使研究人员能够根据文本内容和数据找到相关文档。

让我们看一个例子,看看如何在 Elasticsearch 中实现混合搜索。 首先,我们需要使用包含 BM25 和 HNSW 相似性算法的映射来索引我们的数据:

PUT byte-image-index
{
  "mappings": {
    "properties": {
      "byte-image-vector": {
        "type": "dense_vector",
        "element_type": "byte",
        "dims": 2,
        "index": true,
        "similarity": "cosine"
      },
      "title": {
        "type": "text"
      },
      "area": {
        "type": "keyword"
      }
    }
  }
}

在这里,我们定义了一个映射,其中包括用于 BM25 文本搜索的 title 字段和用于 HNSW 高维数据相似性搜索的 byte-image-vector 字段。我们索引一下数据:

POST byte-image-index/_bulk?refresh=true
{ "index": { "_id": "1" } }
{ "byte-image-vector": [5, -20], "title": "moose family", "area": "Asia" }
{ "index": { "_id": "2" } }
{ "byte-image-vector": [8, -15], "title": "alpine lake", "area": "Europe" }
{ "index": { "_id": "3" } }
{ "byte-image-vector": [11, 23], "title": "full moon", "area": "Africa" }

接下来,我们可以使用文本和向量字段执行搜索,如下所示:

POST byte-image-index/_search
{
  "query": {
    "match": {
      "title": {
        "query": "mountain lake",
        "boost": 0.5
      }
    }
  },
  "knn": {
    "field": "byte-image-vector",
    "query_vector": [6, 10],
    "k": 5,
    "num_candidates": 50,
    "boost": 0.5,
    "filter": {
      "term": {
        "area": "Asia"
      }
    }
  },
  "size": 10
}

此搜索查询结合了 title 字段上的 match 查询和 image-vector 字段上的 knn 查询,使用了我们之前定义的混合相似性算法。 在此示例中,我们为 BM25 和 HNSW 使用了 0.9 和 0.1 的权重,但你可以尝试使用不同的权重来找到适合你的数据和搜索场景的最佳平衡点。 总之,Elasticsearch 中的混合搜索是一种强大的技术,可以结合不同搜索算法的优势,以实现更好的搜索准确性和效率。 通过将用于文本搜索的 BM25 算法与用于最近邻搜索的 HNSW 算法相结合,用户可以在其搜索和分析应用程序中利用这两种算法的强大功能。 通过仔细调整两种算法的权重,混合搜索可以成为从电子商务到科学研究等广泛应用的强大工具。

上述搜索结果为:

{
  "took": 10,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 3,
      "relation": "eq"
    },
    "max_score": 0.9070214,
    "hits": [
      {
        "_index": "byte-image-index",
        "_id": "2",
        "_score": 0.9070214,
        "_source": {
          "byte-image-vector": [
            8,
            -15
          ],
          "title": "alpine lake"
        }
      },
      {
        "_index": "byte-image-index",
        "_id": "3",
        "_score": 0.09977779,
        "_source": {
          "byte-image-vector": [
            11,
            23
          ],
          "title": "full moon"
        }
      },
      {
        "_index": "byte-image-index",
        "_id": "1",
        "_score": 0.014644662,
        "_source": {
          "byte-image-vector": [
            5,
            -20
          ],
          "title": "moose family"
        }
      }
    ]
  }
}

我们甚至可以针对 knn 搜索设置一下 filter 以限制他的搜索范围,比如:

POST byte-image-index/_search
{
  "query": {
    "match": {
      "title": {
        "query": "mountain lake",
        "boost": 0.5
      }
    }
  },
  "knn": {
    "field": "byte-image-vector",
    "query_vector": [6, 10],
    "k": 5,
    "num_candidates": 50,
    "boost": 0.5,
    "filter": {
      "term": {
        "area": "Asia"
      }
    }
  },
  "size": 10
}

在上面,我们使用 filter 来针对 area 来进行过滤,从而加快搜索的速度。上面返回的结果为:文章来源地址https://www.toymoban.com/news/detail-459585.html

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 0.49041456,
    "hits": [
      {
        "_index": "byte-image-index",
        "_id": "2",
        "_score": 0.49041456,
        "_source": {
          "byte-image-vector": [
            8,
            -15
          ],
          "title": "alpine lake",
          "area": "Europe"
        }
      },
      {
        "_index": "byte-image-index",
        "_id": "1",
        "_score": 0.07322331,
        "_source": {
          "byte-image-vector": [
            5,
            -20
          ],
          "title": "moose family",
          "area": "Asia"
        }
      }
    ]
  }
}

到了这里,关于Elasticsearch:结合两全其美:Elasticsearch 与 BM25 和 HNSW 的混合搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 使用ElasticSearch完成大模型+本地知识库:BM25+Embedding模型+Learned Sparse Encoder 新特性

    本文指出,将BM25,向量检索Embedding模型后近似KNN相结合,可以让搜索引擎既能理解用户查询的字面意义,又能捕捉到查询的深层次语义,从而提供更全面、更精确的搜索结果。这种混合方法在现代搜索引擎中越来越普遍,因为它结合了传统搜索的精确性和基于AI的搜索的语义

    2024年02月03日
    浏览(59)
  • BM25检索算法 python

    BM25(Best Matching 25)是一种经典的信息检索算法,是基于 TF-IDF算法的改进版本,旨在解决、TF-IDF算法的一些不足之处。其被广泛应用于信息检索领域的排名函数,用于估计文档D与用户查询Q之间的相关性。它是一种基于概率检索框架的改进,特别是在处理长文档和短查询时表

    2024年04月27日
    浏览(35)
  • 集成多元算法,打造高效字面文本相似度计算与匹配搜索解决方案,助力文本匹配冷启动[BM25、词向量、SimHash、Tfidf、SequenceMatcher]

    搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目

    2024年02月05日
    浏览(68)
  • 1、pytorch分布式数据训练结合学习率周期及混合精度

    正如标题所写,我们正常的普通训练都是单机单卡或单机多卡。而往往一个高精度的模型需要训练时间很长,所以DDP分布式数据并行和混合精度可以加速模型训练。混精可以增大batch size. 如下提供示例代码,经过官网查阅验证的。原始代码由百度文心一言提供。 问题:pytor

    2024年02月07日
    浏览(37)
  • 【WSN覆盖】基于麻雀搜索算法的三维混合无线传感器网络覆盖优化 三维WSN覆盖空洞修复【Matlab代码#25】

    由于节点随机抛洒,而传感器节点的分布情况会影响网络覆盖率。在三维覆盖区域中,传感器节点的覆盖区域是某一半径确定的球。在三维监测区域中随机抛洒 N N N 个传感器节点,形成节点集合 ( s 1 , s 2 , s 3 , . . . , s N ) (s_{1},s_{2},s_{3},...,s_{N}) ( s 1 ​ , s 2 ​ , s 3 ​ , ... , s

    2024年02月06日
    浏览(49)
  • 深度学习 Day25——J4 ResNet与DenseNet结合探索(DPN)

    🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 | 接辅导、项目定制 🚀 文章来源:K同学的学习圈子 : pytorch实现DenseNet算法,tensorflow实现DenseNet算法,DenseNet算法详解 电脑系统:Windows 11 语言环境:python 3.8.6 编译器:pycharm2020.2.3 深度学习环

    2024年01月23日
    浏览(30)
  • 速度和可靠性是可以两全其美的

    当涉及到在线服务时,正常运行时间是至关重要的,但这并不是唯一需要考虑的事情。想象一下,经营一家网上商店——让你的网站99.9%的时间都可用听起来不错,但如果0.1%的停机时间发生在假日购物季呢?这可能意味着失去大笔销售额。如果你的大多数客户只对少数受欢迎

    2023年04月24日
    浏览(27)
  • Elasticsearch:混合搜索是 GenAI 应用的未来

    在这个竞争激烈的人工智能时代,自动化和数据为王。 从庞大的存储库中有效地自动化搜索和检索信息的过程的能力变得至关重要。 随着技术的进步,信息检索方法也在不断进步,从而导致了各种搜索机制的发展。 随着生成式人工智能模型成为吸引力的中心,应用程序需要

    2024年02月22日
    浏览(29)
  • Elasticsearch 混合检索优化大模型 RAG 任务

    Elastic 社区在自然语言处理上面做的很不错官方博客更新速度也很快,现阶段大模型的应用场景主要在 Rag 和 Agent 上,国内 Rag(Retrieval-Augmented Generation 检索增强生成) 的尤其多,而搜索对于 Elasticsearch 来说是强项特别是 8.9 之后的版本提供了 ESRE 模块(集成了高级相关性排序

    2024年04月25日
    浏览(39)
  • 通过 Elasticsearch 和 Go 使用混合搜索进行地鼠狩猎

    作者:CARLY RICHMOND,LAURENT SAINT-FÉLIX 就像动物和编程语言一样,搜索也经历了不同实践的演变,很难在其中做出选择。 在本系列的最后一篇博客中,Carly Richmond 和 Laurent Saint-Félix 将搜索和向量搜索结合起来,使用 Go 客户端在 Elasticsearch 中寻找地鼠(gopher)。 今天构建

    2024年02月05日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包