ElasticSearch-查询语法(全文查询)
创始人
2024-04-05 06:44:13
0

文章目录

  • ElasticSearch-查询语法(全文查询)
    • match
    • match\_phrase
    • match\_phrase\_prefix
    • multi\_match
    • query\_string

ElasticSearch-查询语法(全文查询)

  • 7之前查询时候是: 索引/文档类型/文档id (索引是库,文档类型是表,文档id对应行)
  • 7的时候: 索引/_doc/文档id ( 索引是表,_doc是默认文档类型,文档id对应行) _doc只是用于到8的过度
  • 8+的时候: 索引/文档id (索引是表,文档id对应行) 到8之后_doc就被彻底取消了

es 全文查询主要用在文本字段上,主要考虑查询语句与文档的相关性(Relevance)。

match

match query 用于搜索单个字段,首先会针对查询语句进行解析(经过 analyzer),主要是对查询语句进行分词,分词后查询语句的任何一个词项被匹配,文档就会被搜到,默认情况下相当于对分词后词项进行 or 匹配操作。

GET article/_search
{"query": {"match": {"title": {"query": "Elasticsearch 查询优化"}}}
}

等同于 or 匹配操作,如下:

GET article/_search
{"query": {"match": {"title": {"query": "Elasticsearch 查询优化","operator": "or"}}}
}

如果想查询匹配所有关键词的文档,可以用 and 操作符连接,如下:

GET article/_search
{"query": {"match": {"title": {"query": "Elasticsearch 查询优化","operator": "and"}}}
}

match_phrase

match_phrase query 首先会把 query 内容分词,分词器可以自定义,同时文档还要满足以下两个条件才会被搜索到:

  1. 分词后所有词项都要出现在该字段中(相当于 and 操作)。
  2. 字段中的词项顺序要一致。

例如,有以下 3 个文档,使用 match_phrase 查询只有前两个文档会被匹配:

PUT test_idx/test_tp/1
{ "desc": "what a wonderful life" }PUT test_idx/test_tp/2
{ "desc": "what a life"}PUT test_idx/test_tp/3
{ "desc": "life is what"}GET test_idx/test_tp/_search
{"query": {"match_phrase": {"desc": "what life"}}
}

match_phrase_prefix

match_phrase_prefix 和 match_phrase 类似,只不过 match_phrase_prefix 支持最后一个词进行前缀匹配。

GET test_idx/test_tp/_search
{"query": {"match_phrase_prefix": {"desc": "what li"}}
}

multi_match

multi_match 是 match 的升级,用于搜索多个字段。查询语句为“java 编程”,查询域为 title 和 description,查询语句如下:

GET books/_search
{"query": {"multi_match": {"query": "java 编程","fields": ["title", "description"]}}
}

multi_match 支持对要搜索的字段的名称使用通配符,示例如下:

GET books/_search
{"query": {"multi_match": {"query": "java 编程","fields": ["title", "*_name"]}}
}

同时,也可以用指数符号指定搜索字段的权重。指定关键词出现在 title 中的权重是出现在 description 字段中的 3 倍,命令如下:

GET books/_search
{"query": {"multi_match": {"query": "java 编程","fields": ["title^3", "description"]}}
}

query_string

query_string query 是与 Lucene 查询语句的语法结合非常紧密的一种查询,允许在一个查询语句中使用多个特殊条件关键字(如:AND | OR | NOT)对多个字段进行查询

运算符

“default_operator”:“运算符” 有AND、OR,默认为OR。 比如query里面的内容是 ”搜索服务器”,那么只要分词集中包含之一就可以匹配。

如果"default_operator":“AND”, 那么就是全匹配 比如: query里面的内容是 ”搜索服务器” 那么只要分词集内词能拼出 ”搜索服务器” 这整句话就可以匹配

通配符

支持一些简单的wildcard写法。比如fields:["nam*"]`即任何nam开头的字段

* , 可以代替一个任意字符、 *可代表任意个字符(包括零个)

比如你要查询的内容很长,记不清了但是你记得末尾是tor,那么你只需要把query内容写成*tor即可

正则

如果要在query的内容中使用正则表达式,在两端加上正斜杠/即可。比如: name:/ob[am]{2}a/

GET /testindex/_search
{"query":{"query_string":{"default_field":"title","query":"搜索服务器"}}
}

在这里插入图片描述

点赞 -收藏-关注-便于以后复习和收到最新内容
有其他问题在评论区讨论-或者私信我-收到会在第一时间回复
在本博客学习的技术不得以任何方式直接或者间接的从事违反中华人民共和国法律,内容仅供学习、交流与参考
免责声明:本文部分素材来源于网络,版权归原创者所有,如存在文章/图片/音视频等使用不当的情况,请随时私信联系我、以迅速采取适当措施,避免给双方造成不必要的经济损失。
感谢,配合,希望我的努力对你有帮助^_^

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...