• 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功能一样,但是只能定义一个字段。

     

  • 相关阅读:
    Java反射实现几种方式
    kettle之几个.bat初步介绍
    eclipse 启动项目时候报的错误
    转:kettle中调度kitchen.bat后面接参数,写定时更新任务
    hibernate4,manytomany
    hibernate4,onetomany
    Javascript系列之在HTML中使用JavaScript
    Javascript系列之js简介
    004 C++ 指针
    003 C++ 函数
  • 原文地址:https://www.cnblogs.com/zqwby-0708/p/7873905.html
Copyright © 2020-2023  润新知