zoukankan      html  css  js  c++  java
  • Elasticsearch查询

    查询

    • 基本查询:利用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功能一样,但是只能定义一个字段。

     

  • 相关阅读:
    Python学习札记(十五) 高级特性1 切片
    LeetCode Longest Substring Without Repeating Characters
    Python学习札记(十四) Function4 递归函数 & Hanoi Tower
    single number和变体
    tusen 刷题
    实验室网站
    leetcode 76. Minimum Window Substring
    leetcode 4. Median of Two Sorted Arrays
    leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions 、434. Number of Islands II(lintcode) 并查集 、178. Graph Valid Tree(lintcode)
    刷题注意事项
  • 原文地址:https://www.cnblogs.com/zqwby-0708/p/7873905.html
Copyright © 2011-2022 走看看