读完这本书我才知道es提供了如此丰富的查询功能
词条查询
{
"query" : {
"term" : {
"title" : "crime"
} }
}
查询加权
{
"query" : {
"term" : {
"book_title" : {
"value" : "a",
"boost" : 10.0
}
} }
}
多词条查询
{
"query" : {
"terms" : {
"book_title" : ["a","美女"]
} }
}
match_all
{
"query" : {
"match_all": {}
}
}
常用词查
{
"query" : {
"common" : {
"title" : {
"query" : "crime and punishment",
"cutoff_frequency" : 0.001
}
} }
}
query:这个参数定义了实际的查询内容。
cutoff_frequency: 这个参数定义一个百分比(0.001表示0.1%)或一个绝对值属性值>=1时)。这个值用来构建高、低频词组。此参数设置为0.001意味着频率<=0.1%的词将出现在低频词组中。
low_freq_operator:这个参数可以设为or或and,默认是or。它用来指定为低频词组构建查询时用到的布尔运算符。如果希望所有的词都在文档中出现才认为是匹配,应该把它设置为and。
high_freq_operator:这个参数可以设为or或and,默认是o。它用来指定为高频词组构建查询时用到的布尔运算符。如果希望所有的词都在文档中出现才认为是匹配,那么应该把它设置为and。
minimum_should_match:不使用low_freq_operator和high_freq_operator参数的话,可以使minimum_should_match参数。和其他查询一样,它允许指定匹配的文档中应该出现的查询词的最小个数。
boost:这个参数定义了赋给文档得分的加权值。
analyzer:这个参数定义了分析查询文本时用到的分析器名称。默认值为default analyzer。
disable_coord:此参数的值默认为false,它允许启用或禁用分数因子的计算,该计算基于文档中包含的所有查询词的分数。把它设置为true,得分不那么精确,但查询将 4 稍快。
match
将使用建立索引时的分析词
1. 布尔值匹配查询
布尔匹配查询分析提供的文本,然后做出布尔查询。有几个参数允许控制布尔查询匹配行为, 如下所示。
operator:此参数可以接受or和and,控制用来连接创建的布尔条件的布尔运算符。默 认值是or。如果希望查询中的所有条件都匹配,可以使用and运算符。
analyzer:这个参数定义了分析查询文本时用到的分析器的名字。默认值为default analyzer。
fuzziness:可以通过提供此参数的值来构建模糊查询(fuzzy query)。它为字符串类型 提供从0.0到1.0的值。构造模糊查询时,该参数将用来设置相似性。
prefix_length:此参数可以控制模糊查询的行为。有关此参数值的更多信息,请参阅 3.3.11节。
max_expansions:此参数可以控制模糊查询的行为。有关此参数值的更多信息,请参 阅3.3.11节。
zero_terms_query:该参数允许指定当所有的词条都被分析器移除时(例如,因为停 止词),查询的行为。它可以被设置为none或all,默认值是none。在分析器移除所有查 询词条时,该参数设置为none,将没有文档返回;设置为all,则将返回所有文档。
cutoff_frequency:该参数允许将查询分解成两组:一组低频词和一组高频词。参阅 3.3.4节,看看这个参数怎么用。
这些参数应该封装在运行查询的字段名称里。所以如果想对title字段运行一个简单的布尔 匹配查询,发送如下查询:
{
"query" : {
"match" : {
"title" : {
"query" : "crime and punishment",
"operator" : "and"
}
} }
}
2. match_phrase查询 match_phrase查询类似于布尔查询,不同的是,它从分析后的文本中构建短语查询,而不是布尔子句。该查询可以使用下面几种参数。
slop:这是一个整数值,该值定义了文本查询中的词条和词条之间可以有多少个未知词 条,以被视为跟一个短语匹配。此参数的默认值是0,这意味着,不允许有额外的词条1。
analyzer:这个参数定义了分析查询文本时用到的分析器的名字。默认值为default
POST weibobook/wapbook/_search
{
"query" : {
"match_phrase" : {
"book_title" : {
"query" : "魅力中国",
"slop" : 1
}
}
}
}
3 多个match
match_query查询的最后一种类型是match_phrase_prefix查询。此查询跟match_ phrase查询几乎一样,但除此之外,它允许查询文本的最后一个词条只做前缀匹配。此外,除 了match_phrase查询公开的参数,还公开了一个额外参数max_expansions。这个参数控制有 多少前缀将被重写成最后的词条。
{
"query" : {
"multi_match" : {
"book_title" : {
"query" : "魅力中国",
"fields" : ["author"]
}
} }
}
use_dis_max:该参数定义一个布尔值,设置为true时,使用析取最大分查询,设置为 false时,使用布尔查询。默认值为true。
tie_breaker:只有在use_dis_max参数设为true时才会使用这个参数。它指定低分数 项和最高分数项之间的平衡。
query_string查询
支持全部的lucen语法
simple_query_string
支持全部的lucen语法 不抛出异常
标识查询
通过标识符过滤文本
{
"query" : {
"ids" : {
"values" : [ "10", "11", "12", "13","5372595" ]
} }
}
前缀查询
prefix
POST weibobook/wapbook/_search
{
"query" : {
"prefix" : {
"book_title" : {
"value" : "魅力",
"boost" : 3.0
}
}
}
}
fuzzy_like_this
fuzzy_like_this查询类似于more_like_this查询。它查找所有与提供的文本类似的文 档,但是它有点不同于more_like_this查询。它利用模糊字符串并选择生成的最佳差分词条。
fuzzy_like_this_field
fuzzy_like_this_field查询和fuzzy_like_this查询类似,但它只能对应单个字段。 正因为如此,它不支持多字段属性。
fuzzy
fuzzy查询是模糊查询中的第三种类型,它基于编辑距离算法来匹配文档。编辑距离的计算 基于我们提供的查询词条和被搜索文档。此查询很占用CPU资源,但当需要模糊匹配时它很有用, 例如,当用户拼写错误时
POST weibobook/wapbook/_search
{
"query" : {
"fuzzy" : {
"book_title" : "魅力"
} }
}
通配符查询
通配符查询允许我们在查询值中使用*和?等通配符。
{
"query" : {
"wildcard" : {
"title" : "cr?me"
} }
}
more_like_this
more_like_this查询让我们能够得到与提供的文本类似的文档。
more_like_this_field
more_like_this_field查询与more_like_this查询类似,但它只能针对单个字段。正 6 因为如此,它不支持多字段属性。我们把查询参数封装到要查询的字段名字中,而不是指定 fields参数。
范围查询
gte:范围查询将匹配字段值大于或等于此参数值的文档。 gt:范围查询将匹配字段值大于此参数值的文档。
lte:范围查询将匹配字段值小于或等于此参数值的文档。
lt:范围查询将匹配字段值小于此参数值的文档。
POST weibobook/wapbook/_search
{
"query" : {
"range" : {
"book_id" : {
"gte" : 5353025,
"lte" : 5353028
} }
} }
最大分查询
最大分查询非常有用,因为它会生成一个由所有子查询返回的文档组成的并集并将它返回。这个查询好的一面是,我们可以控制较低得分的子查询对文档最后得分的影响。
文档的最后得分是这样计算的:最高分数的子查询的得分之和,加上其余子查询的得分之和 乘以tie参数的值。所以,可以通过tie_breaker参数来控制较低得分的查询对最后得分的影响。
把tie_breaker设为1.0,得到确切的总和;把tie_breaker设为0.1,结果,除最高得分的查 询外,只有所有查询总得分的10%被加到最后得分里。
{
"query": {
"dismax": {
"tie_breaker": 0.99,
"boost": 10,
"queries": [
{
"match": {
"book_title": "魅力" }
},
{
"match": {
"author": "魅力" }
}
]
}
}
}
正则查询
通过正则表达式查询,可以使用正则表达式来查询文本。请记住,此类查询的性能取决于所 选的正则表达式。如果我们的正则表达式匹配许多词条,查询将很慢。一般规则是,正则表达式 4 匹配的词条数越高,查询越慢。
POST weibobook/wapbook/_search
{
"query" : {
"regexp" : {
"book_title" : {
"value" : "可爱[ae]",
"boost" : 10.0
}
}
}
}