(六) ElasticSearch 搜索实战

1.搜索

1)精确匹配(Term Query)

精确匹配是在指定字段中查找精确匹配指定值的文档。以下是一个精确匹配的示例,查找字段 title 的值为 “Elasticsearch is powerful” 的文档:

POST /my_index/_search
{
    
    
  "query": {
    
    
    "term": {
    
    
      "title": "Elasticsearch is powerful"
    }
  }
}

2)全文搜索(Match Query)

match 查询是一种全文搜索查询,用于在指定字段中搜索与查询字符串相匹配的文档。它将查询字符串分词后与字段中的词进行匹配,并返回匹配的文档。
注意使用match,数据类型需要时text

(1)单条:

要执行单条的 match 查询,你可以使用以下示例代码:

POST /my_index/_search
{
    
    
  "query": {
    
    
    "match": {
    
    
      "content": "Elasticsearch"
    }
  },
  "size": 10,         // 指定每页返回的文档数量
  "from": 0           // 指定从哪个文档开始返回,即偏移量
}

(2)全部:

要执行全部的 match_all 查询,你可以使用以下示例代码:

POST /my_index/_search
{
    
    
  "query": {
    
    
    "match_all": {
    
    
    }
  },
  "size": 10,         // 指定每页返回的文档数量
  "from": 0           // 指定从哪个文档开始返回,即偏移量
}

(3)多个字段

要在 Elasticsearch 中进行多个字段的匹配查询,你可以使用 multi_match 查询。multi_match 查询允许你在一个查询中同时匹配多个字段,并返回匹配结果。

以下是一个使用 multi_match 查询进行多个字段匹配的示例:

POST /my_index/_search
{
    
    
  "query": {
    
    
    "multi_match": {
    
    
      "query": "Elasticsearch",
      "fields": ["title", "content"],
      "operator": "and"
    }
  }
}

需要注意的是,默认情况下,Elasticsearch 使用 OR 运算符来组合多个字段的匹配结果。也就是说,只要任何一个字段匹配成功,文档就会被返回。
如果你想要更改默认行为,可以通过设置 operator 参数来指定使用 AND 运算符。这样,只有同时在多个字段中都匹配成功的文档才会被返回。

(4)短语匹配

在 Elasticsearch 中,match_phrase 查询用于短语匹配,考虑词语顺序,返回包含完整短语的文档。以下是一个使用 match_phrase 查询的示例:

POST /my_index/_search
{
    
    
  "query": {
    
    
    "match_phrase": {
    
    
      "content": "quick brown fox"
    }
  }
}

(4)前缀短语匹配

在 Elasticsearch 中,match_phrase_prefix 查询是一种组合了短语匹配和前缀匹配的查询类型。它用于匹配包含特定短语前缀的文档。

以下是一个使用 match_phrase_prefix 查询的示例:

POST /my_index/_search
{
    
    
  "query": {
    
    
    "match_phrase_prefix": {
    
    
      "content": {
    
    
        "query": "quick brown",
        "slop": 2
      }
    }
  }
}

match_phrase_prefix 查询会考虑短语前缀的顺序,并返回包含匹配短语前缀的文档。通过设置 “slop” 参数,可以指定允许的词项间的最大间隔数。默认情况下,slop 的值为 0,即要求词项严格按照顺序相邻出现。通过增加 slop 的值,可以容忍更多的间隔。

猜你喜欢

转载自blog.csdn.net/csdn570566705/article/details/131208249