ES查询

发布时间 2023-12-25 15:24:54作者: 不带R的墨菲特

1、精准查询

要实现精确查询,你可以使用 Elasticsearch 的 term 查询。term 查询将按照精确值进行搜索,因此可以用来实现精确查询。

以下是一个示例:

假设你有一个名为 "users" 的索引,其中包含一个名为 "name" 的字段,你想要搜索名为 "John" 的用户。你可以使用以下查询:

GET /users/_search  
{  
  "query": {  
    "term": {  
      "name": "John"  
    }  
  }  
}

此查询将返回所有名为 "John" 的用户。请注意,term 查询是大小写敏感的,因此它会将 "John" 与 "john" 视为不同的值。

如果你希望实现大小写不敏感的精确查询,你可以使用 keyword 字段。例如:

GET /users/_search  
{  
  "query": {  
    "term": {  
      "name.keyword": "john"  
    }  
  }  
}

2、模糊查询

在 Elasticsearch 中,可以使用多种方法实现模糊查询。以下是一些常用的模糊查询实现方式:

  1. 通配符查询(Wildcard Query):通配符查询可以使用通配符符号(和?)进行匹配。代表零个或多个字符,?代表单个字符。例如,“appl*”可以匹配“apple”和“application”等单词。通配符查询虽然简单,但在处理大数据时性能相对较差。
  2. 正则表达式查询(Regexp Query):正则表达式查询允许你使用正则表达式来匹配文档中的字符串。例如,使用正则表达式“^a.*e$”可以匹配以“a”开头,以“e”结尾的字符串。
  3. 模糊查询(Fuzzy Query):模糊查询允许你在一定范围内进行模糊匹配。它使用编辑距离算法来计算字符串之间的相似度。你可以通过设置“prefix_length”参数来指定模糊匹配的起始位置。
  4. 跨度查询(Span Query):跨度查询用于在两个连续的文本之间进行匹配。它可以在两个关键词之间进行匹配,或者在一段文本中查找重复的子串。

这些是 Elasticsearch 中常用的模糊查询方法,你可以根据具体需求选择适合的方法进行模糊匹配。

举例:

2.1 Wildcard Query

假设你有一个名为 "users" 的索引,其中包含一个名为 "username" 的字段,你想要搜索以 "ap" 开头的用户名。你可以使用通配符查询来实现这个匹配:

在这个例子中,通配符查询使用 "" 表示任意字符序列,因此 "ap" 可以匹配以 "ap" 开头的任意用户名,例如 "app"、"apple"、"appl" 等。

需要注意的是,通配符查询在大数据集上可能效率较低,因为它们需要遍历索引中的每个文档进行匹配。因此,在处理大量数据时,建议使用其他查询方式,如正则表达式查询或模糊查询,以提高查询性能。

GET /users/_search  
{  
  "query": {  
    "wildcard": {  
      "username": "ap*"  
    }  
  }  
}

 2.2 Regexp Query

 

  2.3 模糊查询(Fuzzy Query)

 2.4  跨度查询(Span Query)