二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

目录

一、全文检索查询

1、match查询

语法:

2、multi_match查询

语法:

3、match和mult_match的区别

二、精确查询

1、term查询:

语法:

2、range查询:(范围查询)

语法:

三、地理查询

1、geo_bounding_box查询:

语法:

2、geo_distance查询:

语法:

四、复合查询

[1、fuction score:](#1、fuction score:)

(1)词条频率

(2)TF-IDF算法

(3)BM25算法

2、总结

[五、Function Score Query](#五、Function Score Query)

1、bool查询


一、全文检索查询

1、match查询

全文检索查询的一种,会对用户输入内容分词,然后去倒排索引库检索。

语法:
复制代码
GET /indexName/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}

2、multi_match查询

与match查询类似,只不过允许同时查询多个字段。

语法:
复制代码
GET /indexName/_search
{
  "query": {
    "multi_match": {
      "query": "TEXT",
      "fields": ["FIELD1","FIELD2"]
    }
  }
}

3、match和mult_match的区别

  • match:根据一个字段查询
  • multi_match:根据多个字段查询,参与查询字段越多,查询性能越差

二、精确查询

精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。

1、term查询:

根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段

value中的值要确保和文档中的一模一样。

语法:
复制代码
GET /indexName/_search
{
  "query": {
    "term": {
      "FIELD": {
        "value": "VALUE"
      }
    }
  }
}

2、range查询:(范围查询)

根据数值范围查询,可以是数值、日期的范围

gte 表示范围下限,lte 表示范围上限;

gt 表示大于而不等于,lt 表示小于而不等于;

语法:
复制代码
GET /indexName/_search
{
  "query": {
    "range": {
      "FIELD": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

三、地理查询

1、geo_bounding_box查询:

查询geo_point值落在某个矩形范围的所有文档

语法:
复制代码
GET /indexName/_search
{
  "query": {
    "geo_bounding_box":{
      "FIELD":{
        "top_left":{
          "lat":31.1,
          "lon":121.5
        },
        "bottom_right":{
          "lat":30.9,
          "lon":121.7
        }
      }
    }
  }
}

2、geo_distance查询:

查询到指定中心点小于某个距离值的所有文档

语法:
复制代码
GET /indexName/_search
{
  "query": {
    "geo_distance":{
      "distance":"15km",
      "FIELD":"31.21.121.5"
    }
  }
}

四、复合查询

复合查询可以将其它简单查询组合起来,实现更复杂的搜索逻辑。

1、fuction score:

算分函数查询,可以控制文档相关性算分,控制文档排名。

(1)词条频率

例子:

"你你你你你,是是是,我我我我,的的,谁",一共有15个字。

"你" 的频率是 "是" 的频率是

频率越高,分数越高,搜索结果越靠前。

(2)TF-IDF算法

例子:

若我要搜索钢铁侠,在搜索结果中,一共有三个文档:

《你是钢铁侠》

《我是钢铁下》

《都是钢铁虾》

其中"钢铁"出现了三次,而文档个数是三次,它的逆文档频率就是 = 0,分数也就是0,

所以"钢铁"就不代表权重了,而"侠"字只出现了一次,所以它的权重大,此搜索结果也就靠前。

(3)BM25算法

BM25是一种用于信息检索的算法,它是基于词频和文档长度的统计方法,用于计算查询与文档之间的相关性得分。BM25算法是一种改进的TF-IDF算法,它考虑了文档长度的影响,以及对于一些高频词汇的惩罚。BM25算法的公式如下:

score(D,Q) = ∑(i=1 to n) IDF(qi) * ((k+1)*f(qi,D))/(f(qi,D)+k*(1-b+b*(|D|/avgdl)))

其中,D表示文档,Q表示查询,qi表示查询中的第i个词,f(qi,D)表示文档D中qi出现的频率,|D|表示文档D的长度,avgdl表示所有文档的平均长度,IDF(qi)表示逆文档频率,k和b是两个可调参数。

BM25算法的优点是可以处理长文档和短文档,而且对于高频词汇的处理也比较合理。但是,BM25算法的计算复杂度较高,需要对所有文档进行扫描和计算,因此在大规模数据集上的应用需要考虑效率问题。

2、总结

五、Function Score Query

1、bool查询

相关推荐
JAVA学习通9 分钟前
OJ竞赛平台----C端题目列表
java·开发语言·jvm·vue.js·elasticsearch
B站计算机毕业设计之家16 分钟前
深度学习实战:python动物识别分类检测系统 计算机视觉 Django框架 CNN算法 深度学习 卷积神经网络 TensorFlow 毕业设计(建议收藏)✅
python·深度学习·算法·计算机视觉·分类·毕业设计·动物识别
程序猿小D22 分钟前
【完整源码+数据集+部署教程】 【运输&加载码头】仓库新卸物料检测系统源码&数据集全套:改进yolo11-DRBNCSPELAN
python·yolo·计算机视觉·目标跟踪·数据集·yolo11·仓库新卸物料检测系统
想唱rap33 分钟前
C++ string类的使用
开发语言·c++·笔记·算法·新浪微博
胖咕噜的稞达鸭33 分钟前
C++中的父继子承(2)多继承菱形继承问题,多继承指针偏移,继承组合分析+高质量习题扫尾继承多态
c语言·开发语言·数据结构·c++·算法·链表·c#
SiYuanFeng35 分钟前
《Synthetic Visual Genome》论文数据集的预处理
python·场景图
MUTA️36 分钟前
python中进程和线程
python
JAVA学习通42 分钟前
基本功 | 一文讲清多线程和多线程同步
java·开发语言·多线程
啦啦9117141 小时前
如何理解Java中的并发?
java·开发语言
jie*1 小时前
小杰深度学习(seventeen)——视觉-经典神经网络——MObileNetV3
人工智能·python·深度学习·神经网络·numpy·matplotlib