自学内容网 自学内容网

Elasticsearch高级搜索技术-全文搜索

目录

倒排索引 (Inverted Index)

示例

分词器 (Analyzer)

评分机制 (Scoring)

查询执行

match 查询

match_phrase 查询


全文搜索是Elasticsearch的核心功能之一,它通过复杂的算法和数据结构来提供高效的搜索能力。为了深入理解其工作原理,我们需要探讨几个关键概念:倒排索引、分词器、评分机制以及查询的执行过程。

倒排索引 (Inverted Index)

倒排索引是全文搜索引擎的基础。与传统的正向索引(记录每个文档中包含哪些词)不同,倒排索引记录的是每个词出现在哪些文档中。这样当用户输入一个搜索请求时,系统可以快速定位到所有含有这些词的文档。

示例

假设有一个小型数据库,包含两篇新闻文章:

  • 文章1: 人工智能正在改变世界。
  • 文章2: 未来的世界将由智能机器主导。

倒排索引可能看起来像这样:

{
  "人工智能": [1],
  "正在": [1],
  "改变": [1],
  "世界": [1, 2],
  "未来": [2],
  "将": [2],
  "由": [2],
  "智能": [2],
  "机器": [2],
  "主导": [2]
}

分词器 (Analyzer)

在创建倒排索引之前,Elasticsearch会使用分词器对文本进行处理。分词器负责将文本分解成单个词语,并且可能会应用如小写转换、停用词移除等操作。不同的语言和地区通常需要不同的分词策略。

例如,在中文环境中,可能使用ik分词器或smartcn分词器来正确地分割中文句子。

评分机制 (Scoring)

Elasticsearch使用TF-IDF(Term Frequency - Inverse Document Frequency)和其他因素来计算每个文档的相关性得分。TF-IDF反映了某个词在特定文档中的重要程度及其在整个文集中的普遍性。此外,还可以考虑诸如短语匹配度、字段权重等因素。

查询执行

当你发起一个查询时,Elasticsearch会解析这个查询并生成一个内部表示形式,然后根据这个表示形式去查找倒排索引,最后返回结果。

match 查询

match查询会对输入的文本进行同样的分析过程,就像在索引过程中一样。这确保了查询条件能够准确对应到已有的词汇表上。

GET /news/_search
{
  "query": {
    "match": {
      "content": "人工智能"
    }
  }
}
match_phrase 查询

match_phrase查询用于精确匹配短语,同时允许通过slop参数控制短语内词之间的距离。

GET /news/_search
{
  "query": {
    "match_phrase": {
      "content": {
        "query": "人工智能",
        "slop": 2  // 允许最多两个其他单词插在这两个词之间
      }
    }
  }
}

这里的slop值为2意味着“人工智能”这两个词可以在文中相隔不超过两个其他词的情况下仍被视为匹配。


原文地址:https://blog.csdn.net/weixin_43298211/article/details/142789542

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!