es搜索语法

ads
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

查询改写(Query Rewrite)

一般情况下es会自动进行查询重写的操作,比如es自动将布尔查询更改为过滤器查询以提高查询速率,当然我们可以调用rewrite api进行合理的查询改写。

1.1 rewrite api可配置的的详细参数

  • constant_score_boolean

    为每个文档分配与参数相等的相关性分数。此方法将原始查询更改为布尔查询。此查询包含每个匹配字词的子句和字词查询。此方法可能会导致最终查询超出 indices.query.bool.max_clause_count 设置中的子句限制。如果查询超过此限制,Elasticsearch 将返回错误。

  • scoring_boolean

    计算每个匹配文档的相关性分数。此方法将原始查询更改为布尔查询。此查询包含每个匹配字词的子句和字词查询。此方法可能会导致最终查询超出 indices.query.bool.max_clause_count 设置中的子句限制。如果查询超过此限制,Elasticsearch 将返回错误。

  • top_terms_blended_freqs_N

    计算每个匹配文档的相关性分数,就好像所有术语都具有相同的频率。此频率是所有匹配项的最大频率。此方法将原始查询更改为布尔查询。此查询包含每个匹配字词的子句和字词查询。最终查询仅包括最高分的查询项。可以使用此方法避免超出 indices.query.bool.max_clause_count 设置中的子句限制。

  • top_terms_boost_N

    为每个匹配的文档分配与参数相等的相关性分数。此方法将原始查询更改为布尔查询。此查询包含每个匹配字词的子句和字词查询。最终查询仅包括对热门字词的查询。可以使用此方法避免超出 indices.query.bool.max_clause_count 设置中的子句限制。

  • top_terms_N

    计算每个匹配文档的相关性分数。此方法将原始查询更改为布尔查询。此查询包含每个匹配字词的子句和字词查询。最终查询 仅包括对得分最高的字词的查询。可以使用此方法避免超出 indices.query.bool.max_clause_count 设置中的子句限制。

1.2 可配置查询改写的查询方法

  • fuzzy(纠错查询)

  • prefix(前置查询)

  • query_string

  • regexp(正则查询)

  • wildcard(通配符查询)

note: 之所以可以在以上的查询中调用查询改写,是因为es本身是基于Lucene,而Lucene原始形态并不支持以上这些查询,为实现这些查询,将这些查询改写为更为简单的形态,例如布尔查询等方法,其中保留的方法就是rewrite。

1.3 rewrite参数确定了什么

  • Lucene:如何计算每个匹配文档的相关性分数

  • Lucene:是否将原始查询更改为查询或位集bool

  • 如果更改为查询,则包含哪些查询子句bool term

1.4 改写的一般规则

一般来说:如果你能接受低精度(高性能),那么可以采用top N查询改写方法。如果你需要更高的查询精度(低性能),那么应该使用布尔方法。

举例:

GET test/_search
{
  "query": {
    "wildcard": {
      "name": {
        "value": "w*",
        "rewrite": "top_terms_boost_10"
      }
    }
  }
}



数据排序

es的排序主要是调用sort参数,并不是所有的数据类型都可以排序,可排序类型:

  • 日期

  • 数字

2.1 降序排序(desc)

例子:

GET test/_search
{
  "query": {
    "match": {
      "name": "wangyang"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

2.2 升序排序(asc)

例子:

GET test/_search
{
  "query": {
    "match": {
      "name": "wangyang"
    }
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

总 结:

对于搜索引擎来说,拥有较快的查询速度、较高的准确率等基础能力已经实属不易,而ES优秀的地方在于它较之于其他搜索引擎更具有查询的灵活性。

当然,灵活的代价就是有大量的奇巧需要练习;有大量的知识需要融汇贯通。希望可以通过阅读本文已经让您大体了解基础的ES搜索方法。


END


本文作者:韩恩乐(上海新炬中北团队)

本文来源:“IT那活儿”公众号


最后编辑于:2024/1/22 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com