关于全文搜索elasticsearch中matchQuery和termQuery的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于全文搜索elasticsearch中matchQuery和termQuery的区别相关的知识,希望对你有一定的参考价值。

matchQuery和termQuery的区别就在match和term
match你可以理解为全文检索,他会拆分你的搜索关键词,再搜索。
term就是单个词,不做分词,直接搜索,精确匹配。
elasticsearch官网上应该有很详细的说明啊,花点时间看看啊。
参考技术A matchQuery是带分词功能的全文搜索
而termQuery是不带分词功能的精准匹配
什么意思呢 matchQuery 会分析词语 比如hello world quick 会拆分这个[hello,wolrd,quick]去搜索
term只会去精准匹配 不带分词

Elasticsearch 全文搜索

1,匹配查询(match)

  • match查询主要的应用场景是进行全文搜索;
// 1,初始化数据
DELETE /my_index 

PUT /my_index
{ "settings": { "number_of_shards": 1 }} 

POST /my_index/my_type/_bulk
{ "index": { "_id": 1 }}
{ "title": "The quick brown fox" }
{ "index": { "_id": 2 }}
{ "title": "The quick brown fox jumps over the lazy dog" }
{ "index": { "_id": 3 }}
{ "title": "The quick brown fox jumps over the quick dog" }
{ "index": { "_id": 4 }}
{ "title": "Brown fox brown dog" }


// 2,match 单个词查询
GET /my_index/my_type/_search
{
  "query":{
    "match":{
      "title":"QUICK!"
    }
  }
}


// 3,match 多词查询
GET /my_index/my_type/_search
{
  "query":{
    "match":{
      "title":"BROWN DOG!"
    }
  }
}

// 3.1 operator 操作符,默认值为or
GET /my_index/my_type/_search
{
  "query":{
    "match":{
      "title":{
        "query":"BROWN DOG!",
        "operator":"and"
        
      }
    }
  }
}

// 3.2 minimum_should_match 最小匹配参数
GET /my_index/my_type/_search
{
  "query":{
    "match":{
      "title":{
        "query":"quick brown dog",
        "minimum_should_match": "75%"
        
      }
    }
  }
}

2,组合查询

// 组合查询
GET /my_index/my_type/_search
{
  "query":{
    "bool":{
      "must":{"match":{"title":"quick"}},
      "must_not":{"match":{"title":"lazy"}},
      "should":[
        {"match":{"title":"brown"}},
        {"match":{"title":"dog"}}
        ]
    }
  }
}

// 备注:should语句,一个文档不必包含“brown”或“dog”这两个词项,但如果一旦包含,它的相关性会提高。

// 控制精度(minimum_should_match)
GET /my_index/my_type/_search
{
  "query":{
    "bool":{
      "should":[
        {"match":{"title":"brown"}},
        {"match":{"title":"fox"}},
        {"match":{"title":"dog"}}
        ],
        "minimum_should_match": 2
    }
  }
}

3,查询语句提升权重

// boost 控制查询语句的相对权重,默认值为1,大于1会提升一个语句的相对权重
GET /_search
{
    "query": {
        "bool": {
            "must": {
                "match": {  
                    "content": {
                        "query":    "full text search",
                        "operator": "and"
                    }
                }
            },
            "should": [
                { "match": {
                    "content": {
                        "query": "Elasticsearch",
                        "boost": 3 
                    }
                }},
                { "match": {
                    "content": {
                        "query": "Lucene",
                        "boost": 2 
                    }
                }}
            ]
        }
    }
}

4,控制分析

// 1,新增字段,并配置分析器
PUT /my_index/_mapping/my_type
{
    "my_type": {
        "properties": {
            "english_title": {
                "type":     "text",
                "analyzer": "english"
            }
        }
    }
}


// 2,validate-query API 分析查询过程
GET /my_index/my_type/_validate/query?explain
{
  "query":{
    "bool":{
      "should":[
        {"match":{"title":"Foxes"}},
        {"match":{"english_title": "Foxes"}}
        ]
    }
  }
}



参考资料:
-FORBIDDEN/12/index read-only / allow delete (api)

以上是关于关于全文搜索elasticsearch中matchQuery和termQuery的区别的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 全文搜索

全文搜索之MySQL与ElasticSearch搜索引擎

ElasticSearch_全文搜索引擎目录

ElasticSearch_全文搜索引擎目录

Mysql利用match...against进行全文检索

ElasticSearch查询 第四篇:匹配查询(Match)