¶ ElasticSearch 匹配查询
环境版本:
ElasticSearch 7.11.1注意: 其请求头为:
Content-Type: application/x-ndjson
¶ 基本查询
查询当前索引下所有文档
1 | GET {{url}}/library/_search |
按条件查询所有文档
1 | GET {{url}}/_search?q=title:guide |
按条件查询文档
1 | GET {{url}}/library/_search?q=title:guide |
term
查询 (精确查询)
term 查询不会有分析器分析的过程,文档中必须包含整个搜索的词汇
1 | GET {{url}}/library/_search |
terms
查询
1 | GET {{url}}/library/_search |
分页查询
1 | # from定义了目标数据的偏移值,size定义当前返回的事件数目 |
返回版本号 _version
1 | GET {{url}}/library/_search |
¶ 组合查询
¶ match
查询
match
查询时,elasticsearch 会根据你给定的字段提供合适的分析器进行分词,比如"宝马多少马力"会被分词为"宝马 多少 马力", 所有有关"宝马 多少 马力", 那么所有包含这三个词中的一个或多个的文档就会被搜索出来。
1 | GET {{url}}/library/_search |
¶ match_phrase
查询
match_phrase
上一个例子中,一个文档"我的保时捷马力不错"也会被搜索出来,那么想要精确匹配所有同时包含"宝马 多少 马力"的文档怎么做?就要使用 match_phrase 了, 完全匹配可能比较严,我们会希望有个可调节因子,少匹配一个也满足,那就需要使用到slop。
1 | GET {{url}}/library/_search |
¶ multi_match
查询
如果我们希望两个字段进行匹配,其中一个字段有这个文档就满足的话,使用
multi_match
比如查询 title 和 preview 这两个字段里都包含 elasticsearch 关键词的文档
1 | GET {{url}}/library/_search |
¶ 指定返回字段
注意: 只能返回 store 为 yes 的字段
1 | GET {{url}}/library/_search |
¶ prefix
前缀匹配查询
1 | GET {{url}}/library/_search |
¶ fuzzy
模糊查询
value | 查询关键字 |
---|---|
boost | 设置查询的权值,默认为 1.0, 默认为 0.5,对于字符串,取值为 0~1(包含 0 和 1),对于数值可能大于 1,对于日期型取值为 1d,2d,1m 这样,1d 代表一天 |
min_similarity | 设置匹配的最小相似度 |
prefix_length | 指明区分词的共同前缀长度,默认是 0 |
max_expansions | 指明查询的词项可扩展的数目,默认可以无限大 |
1 | GET {{url}}/library/_search |
¶ more_like_this
查询
fields | 定义字段组。默认是 _all |
---|---|
like_text | 定义要查询的关键词 |
percent_terms_to_match | 该参数指明一个文档必须匹配多大比例的词项才被视为相似。默认值是 0.3,意思是30%的比例 |
min_term_freq | 该参数指明在生成的查询中查询词项的最大数目。默认为 25 |
stop_words | 该参数指明将被忽略的单词集合 |
min_doc_freq | 该参数指明词项应至少在多少个文档中出现才不会被忽略。默认是 5 |
max_doc_freq | 该参数指明出现词项的最大数目。以避免词项被忽略。默认是无限大 |
min_word_len | 该参数指明单个单词的最小长度,低于该值的单词将被忽略,默认值是e |
max_word_len | 指明单个单词的最大长度.高于该值的单词将被忽略。默认是无限大 |
boost_terms | 该参数指明提升每个单词的权重时使用的权值默认是 1 |
boost | 指明提升一个查询的权值。默认是 1.0 |
analyer | 指定用于分析的分析器 |
1 | GET {{url}}/library/_search |
¶ 布尔过滤查询
1 | # 格式 |
1 | # 建立测试数据 |
1 | # 最简单 filter 查询 |
1 | # 嵌套查询 |
¶ range
范围查询
范围查询用于匹配某些字段的字段值位于特定范围内的文档。Lucene查询的类型依赖于字段的类型,对于字符串字段,是TermRangeQuery,而对于数字/日期字段,查询是NumericRangeQuery。
参数 | 释义 |
---|---|
gte | 大于等于 |
gt | 大于 |
lte | 小于等于 |
lt | 小于 |
boost | 设置查询的推动值(boost),默认为1.0 |
1 | # 查询price字段大于等于10小于等于20的文档。 |
¶ 分析器
查看分析器解析的结果
1 | GET {{url}}/_analyze |
1 | GET {{url}}/_analyze |
1 | # 重新建立一个映射,让 productID 处于 not_analyzed 模式 |