首页 > 其他分享 >ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

ElasticSearch中查询语句用法(match、match_phrase、multi_match、query_string)

时间:2023-12-19 14:46:56浏览次数:31  
标签:multi string 查询 字段 query match name

1、match

1.1 不同字段权重
如果需要为不同字段设置不同权重,可以考虑使用 bool 查询的 should 子句来组合多个 match 查询,并为每个 match 查询设置不同的权重。

{
"query": {
"bool": {
"should": [
{
"match": {
"product_name": {
"query": "apple",
"boost": 3
}
}
},
{
"match": {
"description": {
"query": "apple",
"boost": 1
}
}
}
]
}
}
}

上面的查询将在 product_name 字段和 description 字段中搜索包含 "apple" 的文档,并为 product_name 字段设置权重为 3,而为 description 字段设置权重为 1。这样,在计算匹配得分时,product_name 字段的匹配将比 description 字段的匹配更加重要,因为它的权重更高。

这种方式可以灵活地控制不同字段的权重,以满足不同的搜索需求。

2、match_pharse
match_phrase 查询是 Elasticsearch 中一种用于精确匹配短语的查询方式,可以确保查询字符串中的关键词按照给定的顺序在文档中连续出现。以下是 match_phrase 查询的用法:

2.1 简单用法
match_phrase 查询可以直接指定一个字段和一个短语进行匹配。

GET grade2/_search
{
"query": {
"match_phrase": {
"character": "谦虚 态度"
}
},
"track_total_hits": true
}


上面的查询将在 character字段中搜索包含短语 "谦虚 态" 的文档。

2.2 位置信息
match_phrase 查询会记录匹配短语在文档中的位置信息,可以通过 slop 参数指定允许的位置偏移量。

GET grade2/_search
{
"query": {
"match_phrase": {
"character": {
"query": "谦虚 赞扬",
"slop": 2
}
}
},
"track_total_hits": true
}


3、multi_match
multi_match 查询是 Elasticsearch 中一种用于在多个字段中搜索相同查询字符串的查询方式。它可以在多个字段之间执行相同的查询,并且可以指定不同字段之间的权重(boost),从而影响匹配的相对重要性。

3.1 简单用法
multi_match 查询可以直接指定一个查询字符串,然后在多个字段中进行搜索。

GET grade2/_search
{
"query": {
"multi_match": {
"query": "张一",
"fields": ["name", "character"]
}
},
"track_total_hits": true
}


上面的查询将在 name和 character字段中搜索包含 "张一" 的文档。

3.2 类型匹配
multi_match 查询可以通过 type 参数指定匹配的类型,如 "best_fields"、 "most_fields"、 "cross_fields"、 "phrase"、 "phrase_prefix" 等。不同的类型在匹配方式和结果计算上有所不同。

GET grade2/_search
{
"query": {
"multi_match": {
"query": "张一",
"fields": ["name", "character"],
"type": "best_fields"
}
}
}
上面的查询将使用 "best_fields" 类型在 name 和 character字段中搜索包含短语 "张一" 的文档。

4、query_string
在 Elasticsearch 中,query_string 是一种查询方式,用于在文本字段上执行灵活且强大的搜索操作。query_string 查询支持使用 Lucene 查询语法进行高级搜索,可以通过在查询字符串中指定不同的搜索条件、操作符和逻辑关系来构建复杂的搜索查询。

4.1 简单的关键词匹配
GET grade2/_search
{
"query": {
"query_string": {
"default_field": "character",
"query": "乐观"
}
},
"track_total_hits": true
}


上面的查询将在 character字段中搜索包含关键词 "乐观" 的文档。

4.2 使用逻辑关系和操作符进行组合查询:
GET grade2/_search
{
"query": {
"query_string": {
"default_field": "character",
"query": "乐观 OR (赞扬 AND 优越)"
}
},
"track_total_hits": true
}


上面的查询将在 character字段中搜索包含关键词 "乐观" 或者 “赞扬 和 优越”的文档。

GET grade2/_search
{
"query": {
"query_string": {
"default_field": "character",
"query": "乐观 OR (name:刘一 AND age:25 AND 优越)"
}
},
"track_total_hits": true
}


上面的查询将在 character字段中搜索包含关键词 "乐观" 或者 name字段为 "刘一" 且 age字段为"25" 且 character字段为 “优越” 的文档。

4.3 模糊搜索和通配符搜索
GET account_info/_search
{
"query": {
"query_string": {
"default_field": "email",
"query": "qq?com~"
}
}
}
GET account_info/_search
{
"query": {
"query_string": {
"default_field": "email",
"query": "qqcom~"
}
}
}


上面的查询将在 email字段中搜索类似于 "qq?com" 的词,其中 "?" 表示单个字符的通配符, "~" 表示模糊搜索,"*" 表示多个字符的通配符。

GET account_info/_search
{
"query": {
"query_string": {
"default_field": "email",
"query": "qqcom~",
"fuzziness": 1
}
}
}


可以指定模糊搜索的最大编辑距离。上面的查询将在文档中搜索与 "qqcom~" 关键词的拼写相似且最大编辑距离为 1的文档。

4.4 指定搜索字段和搜索条件
GET grade2/_search
{
"query": {
"query_string": {
"fields": ["name", "age"],
"default_operator": "AND",
"query": "name:刘一, age:26"
}
},
"track_total_hits": true
}
GET grade2/_search
{
"query": {
"query_string": {
"fields": ["name", "age"],
"default_operator": "AND",
"query": "name:刘一 age:26"
}
},
"track_total_hits": true
}
GET grade2/_search
{
"query": {
"query_string": {
"fields": ["name", "age"],
"default_operator": "AND",
"query": "name:刘一 AND age:26"
}
},
"track_total_hits": true
}


GET grade2/_search
{
"query": {
"query_string": {
"fields": ["name", "age"],
"default_operator": "AND",
"query": "name:刘一 AND age:[25 TO 26]"
}
},
"track_total_hits": true
}


上面的查询将在 name 和 age 字段中搜索包含关键词 "刘一" 并且年龄在 25 到 26 之间的文档,其中 fields 参数用于指定搜索字段,default_operator 参数用于指定默认的逻辑操作符。

需要注意的是,query_string 查询可能存在安全风险,因为它允许直接执行用户输入的查询字符串,可能导致潜在的搜索注入攻击,因此在使用时需谨慎验证和过滤用户输入,以防止安全漏洞。同时,根据实际需求和场景,可以根据 Elasticsearch 的文档和查询语法进行更多的配置和优化。
————————————————
版权声明:本文为CSDN博主「IT之一小佬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44799217/article/details/130184205

标签:multi,string,查询,字段,query,match,name
From: https://www.cnblogs.com/ExMan/p/17913697.html

相关文章

  • C. Game with Multiset
    原题链接反思:要把各种可能的情况都判断一遍再提交!不要急着提交简介仓库里有若干个二次方数,请问是否能取出若干数使得刚好等于给定数?情况讨论情况1.仓库里只有一个4,但是我要求2,求不得情况2.仓库里有三个1,我要求3,能求大概思路从\(i\in[log2(v),0]\)遍历(从大到小),如果对于i,仓......
  • RefineNet: Multi-path Refinement Networks for High-Resolution Semantic Segmentat
    RefineNet:Multi-pathRefinementNetworksforHigh-ResolutionSemanticSegmentation*Authors:[[GuoshengLin]],[[AntonMilan]],[[ChunhuaShen]],[[IanReid]]DOI:10.1109/CVPR.2017.549Locallibrary初读印象comment::(RefineNet)一种多路径的用于高分......
  • Istio从入门到精通—— 流量治理的原理 —— VirutalService —— TLSMatchAttributes
    流量治理的原理——VirutalService—— TLSMatchAttributeshttps://istio.io/latest/docs/reference/config/networking/virtual-service/#TLSMatchAttributesTLSconnectionmatchattributes.FieldTypeDescriptionRequiredsniHostsstring[]SNI(s......
  • Istio从入门到精通—— 流量治理的原理 —— VirutalService —— L4MatchAttributes
    流量治理的原理——VirutalService—— L4MatchAttributeshttps://istio.io/latest/docs/reference/config/networking/virtual-service/#L4MatchAttributesL4connectionmatchattributes.NotethatL4connectionmatchingsupportisincomplete.......
  • String类
    String类 String对象是不可变的,字符串一旦创建,内容不能再改变。底层用char[]存放,故可以使用字符串直接量或字符数组创建一个字符串对象(其中String类中有13个构造方法),下面的语句使用字符串直接量"welcometojava"创建一个String对象message:Stringmessage=newStri......
  • QString 与 std::string 相互转换
    QString与std::string之间相互转换时如果存在中文的情况下会出现乱码的情况,此时可以通过如下的方式进行转换,来避免出现乱码1.QString转std::stringQStringqstr="Path测试中文路径find";QByteArraybyteArr=qstr.toLocal8Bit();std::stringstr=st......
  • 无涯教程-Java - String toUpperCase()函数
    将字符串转成大写字母,这等效于调用toUpperCase(Locale.getDefault())。StringtoUpperCase()-语法publicStringtoUpperCase()StringtoUpperCase()-返回值它返回字符串,并转换为大写。StringtoUpperCase()-示例importjava.io.*;publicclassTest{publics......
  • 无涯教程-Java - String toString()函数
    此方法将自身返回一个字符串。StringtoString()-语法publicStringtoString()StringtoString()-返回值此方法返回字符串本身。StringtoString()-示例importjava.io.*;publicclassTest{publicstaticvoidmain(Stringargs[]){StringStr=newS......
  • 无涯教程-Java - String toLowerCase(Locale locale)函数
    如果指定Locale则根据Locale将此String中的所有字符转换为小写,否则调用toLowerCase(Locale.getDefault())默认方法。StringtoLowerCase-语法publicStringtoLowerCase(Localelocale)StringtoLowerCase-返回值它返回转换为小写字母的字符串。StringtoLowerCase-示......
  • 无涯教程-Java - String toLowerCase()函数
    将此String中的所有字符转换为小写,这等同于调用toLowerCase(Locale.getDefault())。StringtoLowerCase()-语法publicStringtoLowerCase()StringtoLowerCase()-返回值它返回转换为小写字母的字符串。StringtoLowerCase()-示例importjava.io.*;publicclassTest......