zoukankan      html  css  js  c++  java
  • Elasticsearch 不同的搜索类型之间的区别

    1、match   轻量级搜索

    1 GET /wymlib/_search
    2 
    3 {
    4   "query": {
    5     "match": {
    6        "title": "王阳明"
    7     }
    8   }
    9 }

    上面的查询匹配就会进行分词,比如"王阳明"会被ik分词器分为"王阳明" ,"阳明", "王","阳","明" 那么所有包含这些词中的一个或多个的文档就会被搜索出来。并且根据lucene的评分机制(TF/IDF)来进行评分。

    2、match_phrase   短语搜索

    1 GET   /wymlib/_search
    2 
    3 {
    4   "query": {
    5     "match_phrase": {
    6       "title": "王阳明"
    7     }
    8   }
    9 }

    match_phrase要求只匹配上"王阳明"这个短语,完全匹配可能比较严,我们会希望有个可调节因子,少匹配一个也满足,那就需要使用到slop

     1 {
     2   "query": {
     3     "match_phrase": {
     4         "title" : {
     5             "query" : "王阳明",
     6             "slop" : 1
     7         }
     8     }
     9   }
    10 }

    3、multi_match   多字段匹配

    如果我们希望两个或两个以上的字段进行匹配,其中一个字段能匹配上就满足的话,使用multi_match

     1 {
     2   "query": {
     3     "multi_match": {
     4       "query": "王阳明第三卷",
     5       "fields": [
     6         "title",
     7         "keywords",
     8         "author"
     9       ]
    10     }
    11   }
    12 }

    multi_match中有三种类型即: best_fields 、 most_fields 和 cross_fields (最佳字段、多数字段、跨字段)

    1) 我们希望完全匹配的文档占的评分比较高,则需要使用best_fields,multi_match默认是best_fields

     1 {
     2   "query": {
     3     "multi_match": {
     4       "query": "王阳明",
     5       "fields": [
     6         "title",
     7         "yearAlias"
     8       ],
     9       "minimum_should_match": "70%"
    10     }
    11   }
    12 }

    2) 我们希望越多字段匹配的文档评分越高,就要使用most_fields

    {
      "query": {
        "multi_match": {
          "query": "王阳明",
          "type": "most_fields",
          "fields": [
            "title",
            "keywords"
          ]
        }
      }
    }

    3) 我们会希望这个词条的分词词汇是分配到不同字段中的,那么就使用cross_fields

     1 {
     2   "query": {
     3     "multi_match": {
     4       "query": "王阳明",
     5       "fields": [
     6         "title",
     7         "keywords"
     8       ],
     9       "type": "cross_fields"
    10     }
    11   },
    12   "highlight": {
    13     "fields": {
    14       "title": {
    15         "pre_tags": ["<a>" ],
    16         "post_tags": [ "</a>"]
    17       },
    18       "keywords": {
    19         "pre_tags": ["<b>" ],
    20         "post_tags": ["</b>" ]
    21       }
    22     }
    23   }
    24 }

    上面查询语句中,包含了高亮显示结果属性:highligt

    4、term 精确值查找

    1 {
    2   "query": {
    3     "term": {
    4       "title": "王阳明"
    5     }
    6   }
    7 }

    与match查询类似,但term是精确查找,代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇,但是 term 和 terms 是 必须包含(must contain) 操作,而不是必须精确相等(must equal exactly),当查询 jack 时,[jack] 和[jack,jone]两条数据都会被找到

  • 相关阅读:
    ZOJ 3765 Lights (zju March I)伸展树Splay
    UVA 11922 伸展树Splay 第一题
    UVALive 4794 Sharing Chocolate DP
    ZOJ 3757 Alice and Bod 模拟
    UVALive 3983 捡垃圾的机器人 DP
    UVA 10891 SUM游戏 DP
    poj 1328 Radar Installatio【贪心】
    poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】
    【转】RMQ-ST算法详解
    poj 3083 Children of the Candy Corn 【条件约束dfs搜索 + bfs搜索】【复习搜索题目一定要看这道题目】
  • 原文地址:https://www.cnblogs.com/hoojjack/p/8600230.html
Copyright © 2011-2022 走看看