Documentação prática de pesquisa para a série Elasticsearch

I. Introdução

Nos artigos anteriores, o editor introduziu algumas operações básicas de es, bem como a construção de tokenizadores comumente usados. Agora, mostrarei alguns métodos comuns de pesquisa de documentos de es.

2. Preparação

Antes de aprender como pesquisar documentos, vamos criar um documento e adicionar alguns dados do documento.

tips: 这里的分词器,我们使用的是上篇文章所说的ik分词器

#创建索引
PUT /students
{
    
    
  "mappings":{
    
    
    "properties":{
    
    
      "id": {
    
    
            "type": "integer",
        "index": true
       },
         "name": {
    
    
            "type": "text",
            "store": true,
        "index": true,
            "analyzer": "ik_smart"
         },
      "info": {
    
    
            "type": "text",
            "store": true,
        "index": true,
            "analyzer": "ik_smart"
         }
     }
   }
}
# 添加数据
POST /students/_doc/
{
    
    
 "id":1,
 "name":"小白程序员",
 "info":"I love coding"
}

POST /students/_doc/
{
    
    
 "id":2,
 "name":"美羊羊",
 "info":"美羊羊是羊村最漂亮的人"
}

POST /students/_doc/
{
    
    
 "id":3,
 "name":"懒羊羊",
 "info":"懒羊羊的成绩不是很好"
}

POST /students/_doc/
{
    
    
 "id":4,
 "name":"小灰灰",
 "info":"小灰灰的年纪比较小"
}

POST /students/_doc/
{
    
    
 "id":5,
 "name":"沸羊羊",
 "info":"沸羊羊喜欢美羊羊"
}

POST /students/_doc/
{
    
    
 "id":6,
 "name":"灰太狼",
 "info":"灰太狼是小灰灰的父亲,每次都会说我一定会回来的"
}

3. Pesquisa de documentos

1. Consulte todos os documentos

correspondência:
1. Caracteres de pesquisa de texto completo, segmente as condições da consulta em palavras antes da pesquisa
2. Também suporta consulta difusa, com função de correção automática de erros (até duas palavras, se exceder, um erro será relatado)

#格式
{
    
    
    "query":{
    
    
    "match_all":{
    
    }
   }
}

eg:  查询全部
GET /students/_search
{
    
    
  "query": {
    
    
    "match_all": {
    
    }
  }
}

2. Consulta difusa baseada em palavras-chave

#eg1:全文检索 match:将查询条件分词后再进行搜索 
GET /students/_search
{
    
    
  "query": {
    
    
    "match": {
    
    
      "info": "喜欢"
    }
  }
}
#eg2:match还支持模糊查询 还具有自动纠错功能(最多自动纠错两个字符,超过两个报错)
GET /students/_search
{
    
    
  "query": {
    
    
    "match": {
    
    
      "info": {
    
    
        "query": "lov",
        "fuzziness": 1
      }
    }
  }
}

3. Pesquisa de intervalo (intervalo)

对数字类型的字符进行范围搜索, que é semelhante ao qualificador de escopo do banco de dados.

#格式
{
    
    
    "query":{
    
    
    "range":{
    
    
      搜索字段:{
    
     
        "gte":最小值,
        "lte":最大值
       } 
     }
   }
}
gt/lt:大于/小于
gte/lte:大于等于/小于等于

eg:
GET /students/_search
{
    
    
  "query": {
    
    
    "range": {
    
    
      "id": {
    
    
        "gte": 1,
        "lte": 3
      }
    }
  }
}

4. Pesquisa de frase

搜索条件不做任何分词解析,在搜索字段对应的倒排索引中精确匹配

#格式
{
    
    
    "query":{
    
    
    "match_phrase":{
    
    
      搜索字段:搜索条件
     }
   }
}

eg:
GET /students/_search
{
    
    
  "query": {
    
    
    "match_phrase": {
    
    
      "info": "成绩"
    }
  }
}

5. Termo/termos de consulta de frase

单词或者词组搜索,不做任何分词解析,在搜索字段对应的倒排索引中精确匹配

#格式
{
    
    
    "query":{
    
    
    "term":{
    
     
            搜索字段: 搜索条件
     }
   }
}


{
    
    
    "query":{
    
    
    "terms":{
    
     
            搜索字段: [搜索条件1,搜索条件2]
     }
   }
}

6. Pesquisa composta

es também podem aninhar várias condições, como a linguagem Java, para filtrar aquela que atende às condições.

#格式
GET /索引/_search
{
    
     
    "query": {
    
     
    "bool": {
    
     
      // 必须满足的条件 
      "must": [ 
                搜索方式:搜索参数,
                搜索方式:搜索参数
       ],
      // 多个条件有任意一个满足即可
      "should": [
                搜索方式:搜索参数,
               搜索方式:搜索参数
           ],
            // 必须不满足的条件
           "must_not":[
               搜索方式:搜索参数,
               搜索方式:搜索参数
           ]
       } 
   } 
}
eg:
GET /students/_search
{
    
    
  "query": {
    
    
    "bool": {
    
    
      "must_not": [
        {
    
    
          "term": {
    
    
            "info": "成绩"
          }
        },
        {
    
    
          "range": {
    
    
            "id": {
    
    
              "gte": 1,
              "lte": 3
            }
          }
        }
      ]
    }
  }
}

O acima é para consultar o aluno cujo id está no intervalo de 1 a 3, e a informação contém a palavra nota

7. Classificação de resultados

es默认使用相关度分数实现排序,也可以通过搜索语法定制化排序

#格式
GET /索引/_search
{
    
     
  "query": 搜索条件,
  "sort": [
       {
    
    
           "字段1":{
    
    
               "order":"asc"
           } 
       },
       {
    
     
           "字段2":{
    
     
               "order":"desc" 
           } 
       }
   ] 
}
eg:
#1根据匹配度排序,高的在前面
GET /students/_search
{
    
    
  "query": {
    
    
    "match": {
    
    
      "info": "我喜欢成绩好的学生"
    }
  }
}

#2根据搜索语法定制化排序
GET /students/_search
{
    
    
  "query": {
    
    
    "match": {
    
    
      "info": "我喜欢淑仪"
    }
  },
  "sort": [
    {
    
    
      "id": {
    
    
        "order": "desc"
      }
    }
  ]
}

Dicas: es não classifica campos do tipo texto por padrão (porque será segmentado por palavras). Se você precisar usar campos do tipo texto para classificar os resultados, poderá usar campos do tipo palavra-chave como base de classificação (porque campos de tipo não farão processamento de segmentação de palavras) )

8. Consulta de paginação

Como o nome indica, quando o conteúdo da consulta é muito grande, ele pode ser dividido em várias páginas e o número especificado de consultas pode ser limitado a cada página.

#格式
GET /索引/_search
{
    
     
    "query": 搜索条件,
    "from": 起始下标,
    "size": 查询记录数
}
eg:
GET /students/_search
{
    
    
	"query":{
    
    
        "match_all":{
    
    }
    },
    "from":0,
    "size":3
}

9. Consulta SQL

Use a instrução sql em es para consultar o documento (inútil)

#格式
GET /_sql?format=txt
{
    
    
    "query": SQL语句
}
eg:
GET /_sql?format=txt
{
    
    
  "query": "select *from students"
}

Quatro. Resumo

Introduzido alguns métodos comuns de pesquisa de documentos de elasticsearch. Combinado com os artigos anteriores, pode ser uma boa introdução ao es. Espero que você ganhe algo.

Acho que você gosta

Origin blog.csdn.net/m0_58847451/article/details/128752276
Recomendado
Clasificación