zoukankan      html  css  js  c++  java
  • query_string查询支持全部的Apache Lucene查询语法 低频词划分依据 模糊查询 Disjunction Max

    3.3
    基本查询
    3.3.1
    词条查询

    词条查询是未经分析的,要跟索引文档中的词条完全匹配
    注意:在输入数据中,title字段含有Crime and Punishment,但我们使用小写开头的crime来搜索;
    因为Crime一词在建立索引时已经变成了crime。

    {
    "query": {
    "term": {
    "title": "crime"
    }
    }
    }


    在词条查询汇总可包含加权属性,影响给定词条的重要程度

    {
    "query": {
    "term": {
    "value": "crime",
    "boost": 10.0
    }
    }
    }

    3.3.2
    多词条查询

    获取所有在tags字段中含有novel或book的文档

    {
    "query": {
    "term": {
    "tags": [
    "novel",
    "book"
    ],
    "minium_match": 1
    }
    }
    }

    3.3.3
    match_all查询
    得到索引中的所有文档

    {
    "query": {
    "term": {
    "match_all": {}
    }
    }
    }

    包含权值,将赋给所有跟它匹配的文档【(?,有何必要?)】

    {
    "query": {
    "term": {
    "match_all": {
    "boost": 2.0
    }
    }
    }
    }

    3.3.4
    常用词查询
    为提高常用词的查询相关性和精确性

    例如,"crime and punishment"
    "and"非常常见,对文档得分的影响非常低;
    解决办法:
    将查询分为2组,第一组包含重要的词,出现的频率较低;
    第二组包含高频率的、不那么重要的词;
    先执行第一个查询,Elasticsearch从第一组的所有词中计算分数,这样通常都很重要的低频词总是被列入考虑范围;
    然后,Elasticsearch对第二组中的词执行二次查询,但只为与第一个查询中匹配的文档计算得分;
    这样只计算了相关文档的得分,实现了更高的性能;

    {
    "query": {
    "common": {
    "title": {
    "query": "crime and punishment",
    "cutoff_frequency": 0.001
    }
    }
    }
    }

    【cutoff_frequency 此参数设置为0.001意味着频率<=0.1%的词将出现在低频词组中】

    查询可使用下列参数。
     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,得分不那么精确,但查询将
    稍快。

    【不像词条查询和多词条查询,常用词查询是经过Elasticsearch分析的。】

    3.3.5
    match查询
    match查询把query参数中的值拿出来,加以分析,然后构建相应的查询。使用match查询
    时,Elasticsearch将对一个字段选择合适的分析器,所以可以确定,传给match查询的词条将被建
    立索引时相同的分析器处理。请记住,match查询(以及将在稍后解释的multi_match查询)不
    支持Lucene查询语法。但是,它是完全符合搜索需求的一个查询处理器。

    {
    "query": {
    "match": {
    "title": "crime and punishment"
    }
    }
    }

    {
    "query": {
    "fuzzy": {
    "title": "crme"
    }
    }
    }

    {
    "query": {
    "wildcard": {
    "title": "cr?me"
    }
    }
    }




    上面的查询将匹配所有在title字段含有crime、and或punishment词条的文档。



    3.3.5
    match查询
    match查询把query参数中的值拿出来,加以分析,然后构建相应的查询。使用match查询
    时,Elasticsearch将对一个字段选择合适的分析器,所以可以确定,传给match查询的词条将被建
    立索引时相同的分析器处理。请记住,match查询(以及将在稍后解释的multi_match查询)不
    支持Lucene查询语法。但是,它是完全符合搜索需求的一个查询处理器。

    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_pharse查询

    从分析后的文本中构建短语查询,而不是布尔子句。

    slop 定义文本查询中的词条和词条之间可以有多少个未知词条,已被视为跟一个短语匹配。默认0,例如slop=1,“a b”和"a and b"被视为匹配。

    analyzer 定义分析器。

    {"query":{

    "match_pharse":{

    "title":{

    "query":"crime punishment",

    "slop":1

    }

    }

    }}

    3、match_pharse_prefix

    同match_pharse,但允许查询文本的最后一个词条只做前缀匹配;

    {"query":{

    "match_pharse_prefix":{

    "title":{

    "query":"crime and punishm",

    "slop":1,

    "max_expansions":20

    }

    }

    }}

    3.3.6

    multi_match

    不是针对单个字段,而是可以通过fields参数针对多个字段查询。

    {"query":{

    "multi_match":{

    "query":"crime and punishm",

    "fields":["title","otitle"]

    }

    }}

    3.3.7

    query_string查询

    支持Apache Lucene查询语法

    { "query" : { "query_string" : { "query" : "title:crime^10 +title:punishment -otitle:cat +author:(+Fyodor +dostoevsky)", "default_field" : "title" } } }

    title字段中包含crime词条的文档,且这些文档有10的加权

    title字段包含punishment,而otitle字段不包含cat

    像大多数Elasticsearch查询一样,query_string提供下列参数控制查询行为。
     query:此参数指定查询文本。
     default_field:此参数指定默认的查询字段,默认值由index.query.default_
    field属性指定,默认为_all。
     default_operator:此参数指定默认的逻辑运算符(or或and),默认值是or。
     allow_leading_wildcard:此参数指定是否允许通配符作为词条的第一个字符,默认
    值为true。
     lowercase_expand_terms:此参数指定查询重写是否把词条变成小写,默认值为true,
    意味着重写后的词条将小写。
     enable_position_increments:此参数指定查询结果中的位置增量是否打开,默认值
    是true。

     fuzzy_max_expansions:使用模糊查询时,此参数指定模糊查询可被扩展到的最大词
    条数,默认值是50。
     fuzzy_prefix_length:此参数指定生成的模糊查询中的前缀长度,默认值为0。欲了
    解更多信息,请参阅3.3.11节。
     fuzzy_min_sim:此参数指定模糊查询的最小相似度,默认值为0.5。欲了解更多信息,
    请参阅3.3.11节。
     phrase_slop: 此参数指定短语溢出值,默认值为0。欲了解更多信息,请参阅3.3.5节。
     boost:此参数指定使用的加权值,默认值为1.0。
     analyze_wildcard:此参数指定是否应该分析通配符查询生成的词条,默认为false,
    意味着词条不会被分析。
     auto_generate_phrase_queries:此参数指定是否自动生成短语查询。其默认值为
    false,这意味着不会自动生成。
     minimum_should_match:此参数控制有多少生成的Boolean should子句必须与文档
    匹配,才能认为它是匹配的。它可以是百分比,例如50%,这意味着至少有50%的给定词
    条必须匹配。它也可以是整数值,如2,这意味着至少2个词条必须匹配。
     lenient:此参数的取值true或false。如果设置为true,格式方面的失败将被忽略。
    DisMax是Disjunction Max的缩写。Disjunction指搜索执行可以跨多个字段,每个字段可以给
    予不同的权重。Max意味着,对于给定词条,只有最高分会包括在最后的文档评分中,而不是所
    有包含该词条的所有字段分数之和(简单的布尔查询才会这样)。
    注意,Elasticsearch可以重写query_string查询,正因为如此,Elasticsearch使我们能够传
    递额外的参数来控制重写方法。有关此过程的详细信息,请参阅3.2节。

     DisMax是Disjunction Max的缩写。Disjunction指搜索执行可以跨多个字段,每个字段可以给 予不同的权重。Max意味着,对于给定词条,只有最高分会包括在最后的文档评分中,而不是所 有包含该词条的所有字段分数之和(简单的布尔查询才会这样)。

    针对多字段的query_string查询

     { "query" : { "query_string" : { "query" : "crime punishment", "fields" : [ "title", "otitle" ], "use_dis_max" : true } } }

    3.3.8

    simple_query_string查询使用Lucene的最新查询解析器之一:SimpleQueryParser。 类似字符串查询,它接受Lucene查询语法;然而不同的是,simple_query_string查询在解析 错误时不会抛出异常。它丢弃查询无效的部分,执行其余部分,示例如下:

    { "query" : { "simple_query_string" : { "query" : "title:crime^10 +title:punishment -otitle:cat +author:(+Fyodor +dostoevsky)", "default_operator" : "and" } } }

    3.3.9

    标识符查询

    仅用提供的标识符来过滤返回的文档

    针对内部的_uid字段运行,不需要启用_id字段

    { "query" : { "ids" : { "values" : [ "10", "11", "12", "13" ] } } }

    限定文档为book类型

    { "query" : { "ids" : { "type" : "book", "values" : [ "10", "11", "12", "13" ] } } }

    3.3.10

    前缀查询

    特定的字段以给定的前缀开始

    {"query":{"prefix":{"title":"cri"}}}

    加入加权属性

    {"query":{"prefix":{"title":{"value":"cri","boost":3.0}}}}

    3.3.11

    fuzzy_like_this查询

    fuzzy_like_this查询类似于more_like_this查询。它查找所有与提供的文本类似的文 档,但是它有点不同于more_like_this查询。它利用模糊字符串并选择生成的最佳差分词条。 如果针对title和otitle字段的fuzzy_like_this查询来查找所有类似于crime punishment 的文档,可以运行以下查询:

    { "query" : { "fuzzy_like_this" : { "fields" : ["title", "otitle"], "like_text" : "crime punishment" } } }

    fuzzy_like_this查询支持以下查询参数。
     fields:此参数定义应该执行查询的字段数组,默认值是_all字段。
     like_text:这是一个必需参数,包含用来跟文档比较的文本。
     ignore_tf:此参数指定在相似度计算期间,是否应忽略词频,默认值为false,意味
    着将使用词频。
     max_query_terms:此参数指定生成的查询中能包括的最大查询词条数,默认值为25。
     min_similarity:此参数指定差分词条(differencing terms)应该有的最小相似性,默
    认值为0.5。
     prefix_length:此参数指定差分词条的公共前缀长度,默认值为0。
     boost:此参数指定使用的加权值,默认值为1.0。
     analyzer:这个参数定义了分析所提供文本时用到的分析器名称。

    3.3.12

    fuzzy_like_this_field查询

    fuzzy_like_this_field查询和fuzzy_like_this查询类似,但它只能对应单个字段。 正因为如此,它不支持多字段属性。作为替代,应该把查询参数封装到字段名称中。查询title 字段的一个示例查询类似于下面这样:

    { "query" : { "fuzzy_like_this_field" : { "title" : { "like_text" : "crime and punishment" } } } }

    3.3.13

    fuzzy查询

    { "query" : { "fuzzy" : { "title" : "crme" } } }

    查询响应如下所示:

    {
    "took": 1,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0,
    "hits": {
    "total": 1,
    "max_score": 0.15342641,
    "hits": [
    {
    "_index": "library",
    "_type": "book",
    "_id": "4",
    "_score": 0.15342641,
    "_source": {
    "title": "Crime and Punishment",
    "otitle": "Преступлéние и наказáние",
    "author": "Fyodor Dostoevsky",
    "year": 1886,
    "characters": [
    "Raskolnikov",
    "Sofia Semyonovna Marmeladova"
    ],
    "tags": [],
    "copies": 0,
    "available": true
    }
    }
    ]
    }
    }
    }


    即使犯了一个拼写错误,Elasticsearch仍然设法找到我们感兴趣的文档。
    可以使用下面的参数来控制fuzzy查询的行为。
     value:此参数指定了实际的查询。
     boost:此参数指定了查询的加权值,默认为1.0。
     min_similarity:此参数指定了一个词条被算作匹配所必须拥有的最小相似度。对字
    符串字段来说,这个值应该在0到1之间,包含0和1。对于数值型字段,这个值可以大于1,
    比如查询值是20,min_similarity设为3,则可以得到17~23的值。对于日期字段,可
    以把min_similarity参数值设为1d、2d、1m等,分别表示1天、2天、1个月。
     prefix_length:此参数指定差分词条的公共前缀长度,默认值为0。
     max_expansions:此参数指定查询可被扩展到的最大词条数,默认值是无限制。

    参数应该封装在查询针对的字段名称里。所以如果想修改前面的查询,并添加额外的参数,
    查询将如下所示:

    { "query" : { "fuzzy" : { "title" : { "value" : "crme", "min_similarity" : 0.2 } } } }

    3.3.14

    通配符查询

    { "query" : { "wildcard" : { "title" : "cr?me" } } }

    加权

    { "query" : { "wildcard" : { "title" : { "value" : "cr?me", "boost" : 20.0 } } } }

    3.3.15 more_like_this 查询

    more_like_this查询让我们能够得到与提供的文本类似的文档。Elasticsearch支持几个参数
    来定义more_like_this查询如何工作,如下所示。
     fields:此参数定义应该执行查询的字段数组,默认值是_all字段。
     like_text:这是一个必需的参数,包含用来跟文档比较的文本。
     percent_terms_to_match:此参数定义了文档需要有多少百分比的词条与查询匹配才
    能认为是类似的,默认值为0.3,意思是30%。
     min_term_freq:此参数定义了文档中词条的最低词频,低于此频率的词条将被忽略,
    默认值为2。
     max_query_terms:此参数指定生成的查询中能包括的最大查询词条数,默认值为25。
    值越大,精度越大,但性能也越低。
     stop_words:此参数定义了一个单词的数组,当比较文档和查询时,这些单词将被忽略,
    默认值为空数组。
     min_doc_freq:此参数定义了包含某词条的文档的最小数目,低于此数目时,该词条将
    被忽略,默认值为5,意味着一个词条至少应该出现在5个文档中,才不会被忽略。
     max_doc_freq:此参数定义了包含某词条的文档的最大数目,高于此数目时,该词条将
    被忽略,默认值为无限制。
     min_word_len:此参数定义了单词的最小长度,低于此长度的单词将被忽略,默认值为0。
     max_word_len:此参数定义了单词的最大长度,高于此长度的单词将被忽略,默认值为
    无限制。
     boost_terms:此参数定义了用于每个词条的加权值,默认值为1。
     boost:此参数定义了用于查询的加权值,默认值为1。
     analyzer:此参数指定了针对我们提供的文本的分析器名称。

    { "query" : { "more_like_this" : { "fields" : [ "title", "otitle" ], "like_text" : "crime and punishment", "min_term_freq" : 1, "min_doc_freq" : 1 } } }

    3.3.16 

    more_like_this_field查询

    { "query" : { "more_like_this_field" : { "title" : { "like_text" : "crime and punishment", "min_term_freq" : 1, "min_doc_freq" : 1 } } } }

    more_like_this查询中的所有其他参数都可以同样的方式作用于more_like_this_ filed查询。

    3.3.17

    范围查询

    范围查询只能针对单个字段,查询参 数应封装在字段名称中。

    { "query" : { "range" : { "year" : { "gte" : 1700, "lte" : 1900 } } } }

    3.3.18

    最大分查询

    {
    "query": {
    "dismax": {
    "tie_breaker": 0.99,
    "boost": 10.0,
    "queries": [
    {
    "match": {
    "title": "crime"
    }
    },
    {
    "match": {
    "author": "fyodor"
    }
    }
    ]
    }
    }
    }


    文档最后得分计算

    最大分查询非常有用,因为它会生成一个由所有子查询返回的文档组成的并集并将它返回。
    这个查询好的一面是,我们可以控制较低得分的子查询对文档最后得分的影响。
    文档的最后得分是这样计算的:最高分数的子查询的得分之和,加上其余子查询的得分之和
    乘以tie参数的值。所以,可以通过tie_breaker参数来控制较低得分的查询对最后得分的影响。
    把tie_breaker设为1.0,得到确切的总和;把tie_breaker设为0.1,结果,除最高得分的查
    询外,只有所有查询总得分的10%被加到最后得分里。
    可以看到,我们在查询中包含了tie_breaker和boost参数。此外,在queries参数中指定
    了一组查询,这些查询将执行并产生结果文档的并集。

    3.3.19

    正则表达式查询

    { "query" : { "regexp" : { "title" : { "value" : "cr.m[ae]", "boost" : 10.0 } } } }

    3.4

    复合查询

    复合查询就是支持可以把多个查询连接起来,或者改变其他查询的行为。

    3.4.1

    布尔查询

    should:被它封装的布尔查询可能被匹配,也可能不被匹配。被匹配的should节点数目由minimum_should_match参数控制。
    must:被它封装的布尔查询必须被匹配,文档才会返回。
    must_not:被它封装的布尔查询必须不被匹配,文档才会返回。

    boost:此参数指定了查询使用的加权值,默认为1.0。加权值越高,匹配文档的得分越高。
    minimum_should_match:此参数的值描述了文档被视为匹配时,应该匹配的should
    子句的最少数量。举例来说,它可以是个整数值,比如2,也可以是个百分比,比如75%。
    更多有关信息,参见 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/
    uery-dsl-minimum-should-match.html。
    disable_coord:此参数的默认值为false,允许启用或禁用分数因子的计算,该计算
    是基于文档包含的所有查询词条。如果得分不必太精确,但要查询快点,那么应该将它
    设置为true。

    {
    "query": {
    "bool": {
    "must": {
    "term": {
    "title": "crime"
    }
    },
    "should": {
    "range": {
    "year": {
    "from": 1900,
    "to": 2000
    }
    }
    },
    "must_not": {
    "term": {
    "otitle": "nothing"
    }
    }
    }
    }
    }


    3.4.2

    加权查询

    {
    "query": {
    "boosting": {
    "positive": {
    "term": {
    "title": "crime"
    }
    },
    "negative": {
    "range": {
    "year": {
    "from": 1800,
    "to": 1900
    }
    }
    },
    "negative_boost": 0.5
    }
    }
    }

    查询title字段中含有crime词条,希望这样的文档得 分不被改变,同时要year字段在1800~1900内的文档,但这样文档的得分要有一个0.5的加权。


    加权查询中有三个节点 需要定义:positive部分,包含所返回文档得分不会被改变的查询;negative部分,返回的文 档得分将被降低;negative_boost部分,包含用来降低negative部分查询得分的加权值。 加权查询的优点是,positive部分和negative部分包含的查询结果都会出现在搜索结果 中,而某些查询的得分将被降低。如果使用布尔查询的must_not节点,将得不到这样的结果。

    3.4.3
    constant_score查询
    如果希望 title字段包含crime词条的所有文档的得分为2.0,可以发出以下查询:
    { "query" : { "constant_score" : { "query" : { "term" : { "title" : "crime" } }, "boost" : 2.0 } } }

    constant_score查询封装了另一个查询(或过滤),并为每一个所封装查询(或过滤)返 回的文档返回一个常量得分。它允许我们严格控制与一个查询或过滤匹配的文档得分。

    3.4.4
    索引查询
    假设我们有一个别名:books,它持有 两个索引:library和users,我们希望使用别名;然而,我们希望在那些索引上执行不同的查 询,为此,发送以下查询:
    {
    "query": {
    "indices": {
    "indices": [
    "library"
    ],
    "query": {
    "term": {
    "title": "crime"
    }
    },
    "no_match_query": {
    "term": {
    "user": "crime"
    }
    }
    }
    }
    }

    上述查询中,query属性中的查询将执行在library索引上,no_match_query属性中的查
    询将执行在集群中其他所有索引上。
    no_match_query属性也可以是个字符串值,而不是一个查询。这个字符串值可以是all或
    者none,默认是all。设置为all,索引中不匹配的所有文档都会返回;设置为none,索引中不
    匹配的文档将不会返回。

    Elasticsearch公开的一些查询,如 custom_score查询、custom_
    boost_factor查询和custom_filters_scores查询,已经被function_
    score查询取代,5.4.3节将描述。我们决定省略这些查询的描述,因为它们在
    Elasticsearch的未来版本中可能会被删除。

  • 相关阅读:
    HTML5 文件上传
    Vue-Router模式、钩子
    网络基础协议随笔
    Vue-Router基础使用
    vue中mixin的一点理解
    纯css3跑马灯demo
    Charles使用笔记
    提个醒。。。
    本机未装Oracle数据库时Navicat for Oracle 报错:Cannot create oci environment 原因分析及解决方案
    easyUI datagrid 清空
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9831000.html
Copyright © 2011-2022 走看看