become who you want to be |

张三Blog

园龄:3年4个月粉丝:3关注:0

(四)ElasticSearch实战进阶教程(ElasticSearch深入搜索)

1.基于词项和基于全文的检索

1.1 基于Term的查询

  • Term的重要性
    • Term是表达语义的最小单位。搜索和利用统计语言模型进行自然语言处理都需要处理Term
  • 特点
    • Term Level Query:Term Query/Range Query/Exists Query/Prefix Query/Wildcard Query
    • 在ES中,Term查询,对输入不做分词。会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公式为每个包含该词项的文档进行相关度算分- (Apple Store)
    • 可以通过Constant Score 将查询转换成一个Filtering,避免算分,并利用缓存,提高性能

1.1.1多字段Mapping 和Term 查询

  • 可以为其增加keyword 来完成完成匹配
  • term查询是不会进行分词的(ES会做 默认的分词处理 )
GET  my_store/_search
{
  "query": {
    "term": {
      "productName": {
        "value": "ZHANGSAN"
        //zhangsan
      }
    }
  }
}

GET  my_store/_search
{
  "query": {
    "term": {
      "productName.keyword": {
        "value": "ZHANGSAN"
      }
    }
  }
}

1.2 复合查询 -Constant Score 转为Filter

  • 将Query 装成Filter,忽略TF-IDF,避免相关性算分的开销
  • Filter可以有效利用缓存
  • 即便是对KeyWord进行Term 查询,同样会进行算分
  • 可以将查询转为Filtering,取消相关性算分的环节,以提升性能
POST  my_store/_search
{
 "explain": true,
 "query": {
   "constant_score": {
     "filter": {
       "term": {
         "productName.keyword": "ZHANGSAN"
       }
     },
     "boost": 1.2
   }
 }
}

在这里插入图片描述

1.3 基于全文的查询

  • 基于全文本的查找
    • Match Query/Match Phrase Query /Query String Query
  • 特点
    • 索引和搜索时都会进行分词,查询字符串先传递到一个合适的分词器然后生成一个供查询的词项列表
    • 查询时候,先会对输入的查询进行分词,然后每个词项逐个进行底层的查询,最终将结果进行合并。并为每个文档生成一个算分。-例如查 “Matrix reloaded” 会查到包括Matrix 或者reload 的所有结果

1.4 Match Query

  • 返回所有包含该值的数据
POST my_store/_search
{
  "query": {
    "match": {
      "content":{
        "query": "zhang san"
      } 
    }
  }
}


  "hits": {
    "total": 3,
    "max_score": 1.0942618,
    "hits": [
      {
        "_index": "my_store",
        "_type": "products",
        "_id": "AXdIzZf2EQcMCfQJ7URS",
        "_score": 1.0942618,
        "_source": {
          "content": "my name is zhang san"
        }
      },
      {
        "_index": "my_store",
        "_type": "products",
        "_id": "AXdIzcDtomOanSvnaKZX",
        "_score": 0.13112299,
        "_source": {
          "content": "my name is wang san"
        }
      },
      {
        "_index": "my_store",
        "_type": "products",
        "_id": "AXdIza-1omOanSvnaKZV",
        "_score": 0.13112299,
        "_source": {
          "content": "my name is li san"
        }
      }
    ]
  }

1.4.1 Operator

  • 可以使用Operator来控制 query
POST my_store/_search
{
  "profile":true,
  "query": {
    "match": {
      "content":{
        "query": "zhang san",
        "operator": "and"
      } 
    }
  }
}

在这里插入图片描述

1.4.2 Match Phrase Query

  • 引用位置的信息使其查询更加精准
POST my_store/_search
{
  "profile":true,
  "query": {
    "match_phrase": {
      "content":{
        "query": "zhang san",
        "slop":1
      } 
    }
  }
}

在这里插入图片描述

1.4.3 Match Query 查询过程

在这里插入图片描述

  • 基于全文本的查找
    • Match Query/Match Phrase Query/Query String Query
  • 基于全文本的查询特点
    • 索引和搜索时都会进行分词,查询字符串先传递到一个合适的分词器,然后生成一个供查询的词项列表
    • 查询会对每个词项逐个进行底层的查询,再将结果进行合并。并为每个文档生成一个算分

2 结构化搜索

2.1 结构化数据

  • 结构化搜索(Structured search)是指对结构化数据的搜索
    • 日期,布尔类型和数字都是结构化的
  • 文本也是可以结构化的
    • 如彩色笔可以有离散的颜色集合red,green,blue
    • 一个博客可能被标记了标签,例如分布式和搜索
    • 电商网站上的商品都有UPCs(通用产品码 Universal Product Codes)或其他的唯一标识,他们都需要遵从严格的约定,结构化的格式

2.2 ES中的结构化搜索

  • 布尔,时间,日期和数字这类结构化数据:有精确的格式,我们可以对这些格式进行逻辑操作。包括比较数字或时间的范围,或判定两个值的大小
  • 结构化的文本可以做精确匹配或者部分匹配
    • Term查询/Prefix 前缀查询
  • 结构化只有(是,否)两个值
    • 根据场景需要,可以决定结构化搜索是否需要打分

本文作者:张三Blog

本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503285.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   张三Blog  阅读(64)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起