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

 

原文地址:https://www.cnblogs.com/zqwby-0708/p/7873905.html