查询
- 基本查询:利用Elasticsearch内置查询条件进行查询
- 组合查询:把多个基本查询组合在一起的复合型查询
- 过滤:查询同时,通过filter条件在不影响打分的情况下筛选出想要的数据
一、基本查询
curl -XGET 'localhost:9200/library/book/_search?q=title:Sanguo'
curl -XGET 'localhost:9200/library/_search?q=title:Sanguo'
curl -XGET 'localhost:9200/_search?q=title:Sanguo'
注:'q' = query
1.1 term查询
查询某个字段里有多个关键词的文档
curl -XGET 'localhost:9200/library/book/_search' -d ' { "query": { "terms": { "preview": [ "sanguo", "book" ], "minimum_match": 2 } } } '
minimum_match: 最小匹配集, 1 表示两个关键词里最少有一个, 2 表示两个关键词都得存在
1.2 match查询
match查询可接受文字,数字,日期等数据类型。
match与term的区别是:match查询时,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程。
curl -XGET 'localhost:9200/library/book/_search' -d ' { "query": { "match": { "preview": "elasticsearch" } } } '
1.3 match_all查询
查询指定索引下的所有文档
curl -XGET 'localhost:9200/library/book/_search' -d ' { "query": { "match_all": {} } } '
1.4 match_phrase查询
短语查询,slop定义的是关键词之间间隔多少未知单词
curl -XGET 'localhost:9200/library/book/_search' -d ' { "query": { "match_phrase": { "preview": { "query": "start,end", "slop": 2 } } } } '
1.5 multi_match查询
查询指定的多个字段
curl -XGET 'localhost:9200/library/book/_search' -d ' { "query": { "multi_match": { "query": "sanguo", "fields": ["title","preview"]: } } } '
查询title和preview字段,同时包含sanguo关键词的文档
1.6 控制查询返回的数量
相当于mysql中的limit
from: 从哪个结果开始返回
size:定义返回最大的结果数
curl -XGET 'localhost:9200/library/book/_search' -d ' { "from": 1, "size": 2, "query": { "term": { "title": "sanguo" } } } '
表示从第1个出现关键字的地方开始返回2个相关数据。
1.7 返回版本号_version
curl -XGET "localhost:9200/library/book/_search" -d ' { "version": true, "query": { "term": { "preview": "sanguo" } } } '
1.8 指定返回的字段
curl -XGET 'localhost:9200/library/book/_search' -d ' { "fields": [ "preview", "title" ], "query": { "match": { "preview": "sanguo" } } } '
返回匹配preview的文档,并且只返回preview和title数据。
1.9 partial_fields 控制加载的字段
可以使用通配符
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "partial_fields": { "partial": { "include": [ "pre*" ], "exclude": [ "ti*", "price" ] } }, "query": { "match_all": {} } } '
include:包含哪些字段
exclude: 排除哪些字段
1.10 sort排序
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "query": { "match_all": {} }, "sort": [ { "price": { "order": "desc" } } ] } '
以 price 为基准排序 desc(降序) asc (升序)
1.11 prefix前缀匹配查询
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "query": { "prefix": { "title": { "value": "r" } } } } '
查询title中以"r"开头的文档
1.12 range范围查询
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "query": { "range": { "publish_date": { "from": "2017-01-01", "to": "2017-12-31" } } } } '
from ,to ,include_lower (是否包含范围的左边界,默认为true) ,include_upper (是否包含范围的右边界,默认为true),boost
1.13 wildcard查询
允许使用通配符 * 和 ? 来进行查询,* 匹配一个或多个字符, ? 匹配一个字符,此查询很影响性能
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "query": { "wildcard": { "preview": "rab*" } } } '
1.14 fuzzy模糊查询
- value: 查询的关键字
- boost: 设置查询的权志,默认是1.0
- min_similarity: 设置匹配的最小相似度,默认值为0.5;对于字符串,取值为0-1(包括0和1);对于数值,取值可能大于1,;对于日期型,取值为1d,2d,1m这样,1d就代表一天。
- prefix_length: 指明区分词项的共同前缀长度,默认是0
- max_expansions: 指明查询中的词项可扩展的数目,默认可以无限大
此查询很影响性能
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "query": { "fuzzy": { "preview": { "value": "rabit", "min_similarity": 0.5 } } } } '
1.15 fuzzy_like_this 模糊查询
查询得到与给定内容想死的所有文档,此查询很影响性能
- fileds: 自短租,默认是_all
- like_text: 设置关键词
- ignore_tf: 设置忽略词项的频次,默认是false
- max_query_terns: 指明在生成的查询中查询词项的最大数目,默认是25
- min_similarity: 指明分词项最小的相似度,默认是0.5
- prefix_length: 指明分词项共同前缀的长度,默认是0
- boost: 设置权志,默认是1.0
- analyze: 指明用于分析给定内容的分析器
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "query": { "fuzzy_like_this": { "fields": [ "preview" ], "like_text": "open source software", "min_similarity": 0.5, "prefix_length": 0.2 } } } '
1.16 fuzzy_like_this_field 查询
与fuzzy_like_this_field功能一样,但是只能定义一个字段。
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "query": { "fuzzy_like_this": { "preview":{ "like_text": "open source software", "min_similarity": 0.5, "prefix_length": 0.2 } } } } '
1.17 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: 该参数指明单个单词的最小长度,高于该值得单词将被忽略,默认值是0
- max_word_len: 指明单个单词的最大长度,高于该值得单词将被忽略,默认值是0
- boost_terms: 该参数指明提升每个单词的权重时使用的权值。默认是1
- boost: 指明提升一个查询的权值,默认是1.0
- analyer: 指定用于分析的分析器
curl -XGET 'http://localhost:9200/library/book/_search' -d ' { "query": { "more_like_this": { "fields": [ "preview" ], "like_text": "Apache open source", "min_term_freq": 1, "min_doc_freq": 1 } } } '
1.18 more_like_this_field 查询
与more_like_this功能一样,但是只能定义一个字段。