欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【elasticsearch】三、搜索详解-全文搜索

程序员文章站 2022-07-05 14:48:09
...

match query:

  • 会对查询语句进行分词,可以匹配分词后的任一词项

如分词后可以匹配大小写等格式(由该字段的分词类型决定),但term只能精准匹配词项

 

【获取当前索引下的所有文档】

GET /test_data_type/_search

等同于:

GET /test_data_type/_search
{
  "query": {
    "match_all": {}
  }
}

返回值:

"hits": {
    "total": 243, //匹配的文档总数
    "max_score": 8.897254, //匹配到文档的最高分
    "hits": [
      {
        "_index": "shakespeare",  //索引名
        "_type": "line", //type
        "_id": "44522", //文档id
        "_score": 8.897254,  //匹配分值
        "_source": {
          "line_id": 44523,
          "play_name": "King John",
          "speech_number": 15,
          "line_number": "3.1.115",
          "speaker": "CONSTANCE",
          "text_entry": "War! war! no peace! peace is to me a war"
        }
      },
.......

【分页获取】

GET /test_data_type/_search
{
  "from": 0,
  "size": 5
}

【只获取某些字段】

GET /test_data_type/_search
{
  "_source": ["keyword", "name"]
}

【获取版本号】

因为默认不返回版本号

GET /test_data_type/_search
{
  "version": true
}

【最小评分过滤】

GET /shakespeare/_search
{
  "min_score": 8.0,  //获取评分为8.0以上的
  "query": {
    "match": {
      "text_entry": "war"
    }
  }
}

【高亮-关键字】

GET /shakespeare/_search
{
  "min_score": 8.0,
  "query": {
    "match": {
      "text_entry": "war"
    }
  },
  "highlight": { //高亮
    "fields": {
      "speaker": {}
    }
  }
}

【查询一个字段多个关键词】

GET /shakespeare/_search
{
  "min_score": 8.0,
  "query": {
    "match": {
      "text_entry": {
        "query": "hes mankind", //同时匹配 hes mankind这两个关键词 
        "operator": "or" // or:匹配任一即可 and:匹配所有关键词
      }
    }
  }
}

【查询多个字段(multi_match)一个关键词】

GET /shakespeare/_search
{
  "min_score": 8.0,
  "query": {
    "multi_match": {
      "query": "ROMEO",
      "fields": ["text_entry^3", "speaker", "*_name"] 
      // ^:权重  关键词出现在text_entry中是其他字段的n倍
      //*:通配符
     }
  }
}

【查询高频、低频词 common_terms query】

es会先查一次低频词,给score;然后再查一次高频词,仅输出结果

GET /shakespeare/_search
{
  "query": {
    "common": {
      "text_entry": {
        "query": "the first second",
        //如果低频词找不到对应的文档,那么结果集就是空,不会去找高频词;
        //如果低频词找到了对应的文档,会优先返回低频词的文档;
        //如果没有低频词,那么直接返回高频词的文档(是否是高频词的概率由以下字段设置)
        "cutoff_frequency": 0.0001,  //频率高于0.01%的词项会被当作高频词
        "low_freq_operator" : "and" //and:低频词必须每个都搜索 or:不必每个都搜索
      }
    }
  }
}

相当于:

GET /shakespeare/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "text_entry": "hitherwardfs"
          }
        }
      ],
      "should": [
        {
          "term": {
            "text_entry": "the"
          }
        }
      ]
    }
  }
}