文章目录

  • dsl搜索-term 与 match
  • 1. term
  • 测试如下:
  • 2. match
  • 测试如下:
  • PS: 1. match: operator (默认是 or)
  • PS: 2. ids 根据ES的id进行检索
  • 3. terms
  • 测试如下:
  • 4. match_phrase (严格的匹配, 具有顺序)
  • 测试
  • PS: slop 测试
  • 5. multi_match (多重查询)
  • `multi_match `权重boost设置 `^10`


dsl搜索-term 与 match

1. term

term 表示当一个用户输入单个词条的时候, 是不会进行分词搜索的, 即term 的词条为keyword.

测试如下:

esmatch和term的区别 mysql_搜索

{
    "query":{
        "term":{
            "desc":"慕课网"
        }
    },
    "_source": [
            "id",
            "nickname",
            "desc"
        ]
    
}

2. match

match 表示当一个用户输入一个词条的时候, 是会进行将输入词条进行分词搜索的, 即全文检索

测试如下:

esmatch和term的区别 mysql_搜索引擎_02


esmatch和term的区别 mysql_elasticsearch_03

PS: 1. match: operator (默认是 or)

or表示用户的搜索词条可以出现在不同的数据项中,

and 表示用户的搜索词条必须在同一条数据中出现, 没有先后顺序

minimum_should_match : 60 % 表示用户的搜索词条只进行匹配60%以上的内容, 即如果有用户输入8个关键词, 这匹配包含4个关键字(算出来后向下取整)以上的数据项; 也可以输入数字, 这匹配该数字以上的数据.

esmatch和term的区别 mysql_elasticsearch_04

PS: 2. ids 根据ES的id进行检索

esmatch和term的区别 mysql_搜索_05

{
    "query":{
        "ids":{
            "type": "_doc",
            "values": [
                "1001",
                "1003",
                "1009"
            ]
        }
    },
    "_source": [
            "id",
            "nickname",
            "desc"
        ]
    
}

3. terms

terms 表示当一个用户输入多个词条的时候, 多个词条都会当作关键字进行检索.

测试如下:

esmatch和term的区别 mysql_慕课网_06

{
    "query":{
        "terms":{
            "desc":["慕课网","学习","骚年"]
        }
    },
    "_source": [
            "id",
            "nickname",
            "desc"
        ]
    
}

4. match_phrase (严格的匹配, 具有顺序)

match_phrase 表示当用户去查询的时候, 查询的词条首先会进行分词, 分词后的词语必须包含在同一条数据中, 且分词后的词语具有先后顺序, 他们必须在数据中连续, 可以设置 slop 的值, 来表示他们直接允许跳过的最大的关键词的数量.

测试

esmatch和term的区别 mysql_搜索引擎_07

{
    "query":{
        "match_phrase":{
            "desc":{
                "query": "大学 毕业"
            }
        }
    },
    "_source": [
            "id",
            "nickname",
            "desc"
        ]
    
}

PS: slop 测试

esmatch和term的区别 mysql_搜索_08

{
    "query":{
        "match_phrase":{
            "desc":{
                "query": "大学 研究生",
                "slop": 3
            }
        }
    }
}

5. multi_match (多重查询)

match 是单个查询.

multi_match是多重查询, 即可以在查询时候, 同时查询多个字段包含该信息的数据项, 比如慕课网可以在nickname中和desc中同时检索.

esmatch和term的区别 mysql_elasticsearch_09

{
    "query":{
        "multi_match":{
            "query": "慕课网",
            "fields" : [
                "desc",
                "nickname"
            ]
        }
    },
    "_source": [
            "id",
            "nickname",
            "desc"
        ]
}

multi_match权重boost设置 ^10

esmatch和term的区别 mysql_搜索_10