【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"
}
}
]
}
}
}