1.Prefix前缀查询

  1. GET /people/man/_search
  2. {
  3. "query": {
  4. "prefix": {
  5. "name": "z"
  6. }
  7. }
  8. }

2.Wildcard通配符查询

  1. GET /people/man/_search
  2. {
  3. "query": {
  4. "wildcard": {
  5. "name": "z?z*"
  6. }
  7. }
  8. }

与 prefix 前缀查询的特性类似, wildcard 通配符查询也是一种底层基于词的查询,与前缀查询不同的是它允许指定匹配的正则式。
它使用标准的 shell 通配符查询,”?”表示匹配任意字符, “”表示匹配 0 或多个字符。
wildcard 查询的工作方式与 prefix 查询完全一样,它们也需要扫描倒排索引中的词列表才能找到所有匹配的词,然后依次获取每个词相关的文档 ID ,与 prefix 查询的唯一不同是:它能支持更为复杂的匹配模式。
这也意味着需要同样注意前缀查询存在性能问题,对有很多唯一词的字段执行这些查询可能会消耗非常多的资源,所以要避免使用左通配这样的模式匹配(如:
foo 或 .*foo 这样的正则式)。
数据在索引时的预处理有助于提高前缀匹配的效率,而通配符查询只能在查询时完成,尽管这些查询有其应用场景,但使用仍需谨慎。