翻译-Elastcisearch Match Query

  1. Match Query

Match 查询可以接受 text/numeric/date类型的数据。分析并构建一个查询:

GET /_search

{

    "query": {

        "match" : {

            "message" : "this is a test"

        }

    }

}

注意:message是一个字段。可以替换为其他任意字段。

    1. Match

Match查询是boolean查询的一种类型。这意味着提供的查询数据会被分,分析程序会构建一个Boolean查询。Operator标志可以被设置用来控制布尔语句(默认是or,可以置为and或者or)。should 子句做匹配查询可以使用minimum_should_match参数用来限制最小的选择条件个数。

get /otp_aap_addr_detail_info_2019_06/_doc/_search

{

  "query": {

    "bool":{

    "should": [

     { "match":{ "stdAddress": "匹"}},

     { "match":{ "stdAddress": "纽约"}}

    ],

    "minimum_should_match": 1

  }

  }

}

此操作表明should的条件至少匹配一个

get /otp_aap_addr_detail_info_2019_06/_doc/_search

{

  "query": {

    "bool":{

    "should": [

     { "match":{ "stdAddress": "海"}},

     { "match":{ "stdAddress": "纽约"}}

    ],

    "minimum_should_match": 2

  }

  }

}

analyzer 用来控制哪个分词器来分析文本数据。默认是根据字段来显示映射定义,或者使用默认的查询分词器。

lenient 设置为true会忽略数据类型不匹配带来的异常。比如将数字字段使用string来查询。缺省是false

  1. 2模糊

Fuzziness参数用来基于字段的模糊匹配。

控制模糊匹配过程可以通过 prefix_lengthmax_expansions参数的设置来实现。如果模糊选项被设置。查询会使用top_terms_blended_freqs_${max_expansions}作为他的重写方法。fuzzy_rewrite参数允许查询获取重写的方法。

模糊调换(ab->ba)默认是被允许的。如果fuzzy_transpositions设置为false就会失效。

注意:模糊匹配不能用于termsTerms是一种特殊的查询它不支持关于模糊的相关扩展。

get /otp_aap_addr_detail_info_2019_06/_doc/_search

{

  "query": {

    

      "match":{

        "stdAddress":{

          "query" :"第十",

          "fuzziness":0         

        } }

  }

}

match查询

    该查询讲query参数中的值拿出来加以分析,然后构建相应的查询

    布尔值查匹配查询

        {

            "query":{

                "match":{

                    "title":{

                        "query" :"crime and punishment",

                        "operator":"and"   -- 连接创建布尔条件的运算符默认or

                        "analyzer" :"",    -- 分析器的名字

                        "fuzziness":"",    -- 构建模糊查询

                        "prefix_length",   -- 控制模糊查询的行为

                        "max_expansions",  -- 同上

                        "zero_terms_query" -- 指定当所有的词条都被分析器移除时,查询的行为。可以为all或者none。默认后者

                                    不反悔或者返回所有文档

                        "cutoff_frequency" -- 将查询分解成两组,一组高频一组低频

                    }

                }

            }

        }

  1. 3 0 terms 查询

如果在查询中analyzer去掉所有的token那就相当于取消了过滤功能。缺省的行为是匹配不到任何数据。为了改善这种情况可以使用zero_terms_query选项,他可以接受none或者allmatch_all一起协作。

GET /_search

{

    "query": {

        "match" : {

            "message" : {

                "query" : "to be or not to be",

                "operator" : "and",

                "zero_terms_query": "all"

            }

        }

    }

}

官方给的是match查询,改了match_all查询报错了。

  1. 4截止频率

Match查询支持cutoff_frequency,这会允许显示的指定一个文档频率。高频词组被进入可选子查询,仅有高频词组被打分。在这种指定文档频率的情况下,低频词组在就会被匹配到

查询功能允许在执行的时候动态处理stopwords。这是一个独立的领域不需要一个停止词汇文件。他会组织搜索高频词汇只将低频无意义的词汇匹配出对应文档。如果查询指定了cutoff_frequency。他会被默认转化为and查询来加快执行。

cutoff_frequency既与数据总数相关也与执行的数字范围有关[0..1)或者比1大。

GET /_search

{

    "query": {

        "match" : {

            "stdAddress" : {

                "query" :   "华徐公路3029",

                "cutoff_frequency" : 0.03

            }

        }

    }

}

把这个改为"cutoff_frequency" : 0.001会有更多的搜索到低频数据。

cutoff_frequency shard层级上执行。在尝试执行这些脚本在测试index的时候由于数据量会比较少下面的链接会有一些建议。

https://www.elastic.co/guide/en/elasticsearch/guide/master/relevance-is-broken.html

  1. 5同义词

Match支持多个term的同义词扩展。当过滤器使用的时候。分词器为每一个multi-terms同义词创建查询。

GET /_search

{

   "query": {

       "match" : {

           "message": {

               "query" : "ny city",

               "auto_generate_synonyms_phrase_query" : false

           }

       }

   }

}

同义词需要提前创建。上面的条件语句翻译为:(ny OR (new AND york)) city)

auto_generate_synonyms_phrase_query 这个参数默认为true

同义词创建学习文档

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/analysis-synonym-graph-tokenfilter.html

与query_string/字段的比较

Match家族的查询不适用"query parsing"程序。它不支持前缀查询,贪心匹配,或者其他高级特性。正是由于查询的准确性比较高,并且它分析和执行文本查询的时候非常优秀(这些操作自文本查询盒子中执行)。phrase_prefix 类型提供优秀的查询操作来加载查询数据。

你可能感兴趣的:(分布式中间件)