当前位置: 代码网 > it编程>编程语言>Asp.net > 二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)

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

2024年08月02日 Asp.net 我要评论
Function Score Query

目录

一、全文检索查询

1、match查询

语法:

2、multi_match查询

语法:

3、match和mult_match的区别

二、精确查询

1、term查询:

语法:

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

语法:

三、地理查询

1、geo_bounding_box查询:

语法:

2、geo_distance查询:

语法:

四、复合查询

1、fuction score:

(1)词条频率

(2)tf-idf算法

(3)bm25算法

2、总结

五、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)词条频率

例子:

(2)tf-idf算法

例子:

(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查询

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com