elasticsearch(八)---search api

998 阅读5分钟

ElasticSearch版本:6.3.2

elasticsearch(二)---基本数据操作中,我们已经初步介绍了es基本的查询方式。在本篇中,主要在其基础上进行扩展,查漏补缺。

1.首选项(Preference)

Preference控制要在执行搜索的分片副本的首选项。默认情况下,Elasticsearch会以未指定的顺序从可用的分片副本中进行选择,同时考虑分配感知和自适应副本选择配置。但是,有时可能需要尝试将某些搜索路由到某些碎片副本集,例如以便更好地使用每个拷贝的高速缓存。

Preference是一个查询字符串参数,可以设置为:

_primary :该操作仅在主分片上执行

_primary_first:如果可能,操作将在主分片上执行,但如果不是,则将回退到其他分片

_replica:该操作仅在副本分片上执行。如果有多个副本,则它们之间的优先顺序是未指定的。

_replica_first:如果可能,操作将在副本分片上执行,但如果不是,则将回退到其他分片。如果有多个副本,则它们之间的优先顺序是未指定的。

_only_local:该操作仅在分配给本地节点的分片上执行。

  注意:_only_local首选项仅保证在本地节点上使用分片副本,这有时对故障排除很有用。
  所有其他选项并不能完全保证在搜索中使用任何特定的分片副本,并且在更改索引时,
  这可能意味着如果重复搜索在不同的刷新状态的不同分片副本上执行,则可能产生不同的结果。

_local:如果可能,将对分配给本地节点的分片执行操作,否则将回退到其他分片。

_prefer_nodes:abc,xyz:如果可能,将在具有所提供的节点id之一(在这种情况下为abc或xyz)的节点上执行该操作。如果在多个所选节点上存在合适的分片副本,则未指定这些副本之间的首选顺序。

_shards:2,3:将操作限制为指定的分片。 (在这种情况下为2和3)。此首选项可以与其他首选项结合使用,但必须首先显示。如:_shards:2,3 | _local

_only_nodes:abc*,x*yz,...:将操作限制为根据节点规范指定的节点。如果在多个所选节点上存在合适的分片副本,则未指定这些副本之间的首选顺序。

注意:_primary,_primary_first,_replica和_replica_first已弃用,因为不建议使用它们。
它们无助于避免因使用具有不同刷新状态的分片而产生的不一致结果,并且Elasticsearch使用同步复制,因此主数据通常不包含比其副本更新的数据。
如果无法搜索首选副本,_primary_first和_replica_first首选项将无声地回退到非首选副本。
如果将副本提升为主副本,则_primary和_replica首选项将以静默方式更改其首选分片,这可能随时发生。
_primary首选项会在主分片上添加不必要的额外负载。
也可以使用_only_nodes,_prefer_nodes或自定义字符串值来获取这些选项的缓存相关优势。

Custom (string) value:任何不以_开头的值。如果两个搜索都为其首选项提供相同的自定义字符串值,并且基础集群状态不会更改,则将使用相同的分片顺序进行搜索。这并不能保证每次都使用完全相同的分片:群集状态以及所选分片可能会因包括分片重定位和分片失败在内的多种原因而发生变化,并且节点有时可能会拒绝导致备用节点回退的搜索。然而,在实践中,碎片的排序趋于长时间保持稳定。自定义首选项值的良好候选者类似于Web会话ID或用户名。

例如,使用用户的会话ID xyzabc123,如下所示:

GET /_search?preference=xyzabc123
{
    "query": {
        "match": {
            "title": "elasticsearch"
        }
    }
}

2.解释(Explain)

允许Explain每个命中如何计算其分数。无论文档是否与特定查询匹配,这都可以提供有用的反馈。

GET /twitter/_doc/0/_explain
{
      "query" : {
        "match" : { "message" : "elasticsearch" }
      }
}

这将产生以下结果:

{
   "_index": "twitter",
   "_type": "_doc",
   "_id": "0",
   "matched": true,
   "explanation": {
      "value": 1.6943599,
      "description": "weight(message:elasticsearch in 0) [PerFieldSimilarity], result of:",
      "details": [
         {
            "value": 1.6943599,
            "description": "score(doc=0,freq=1.0 = termFreq=1.0\n), product of:",
            "details": [
               {
                  "value": 1.3862944,
                  "description": "idf, computed as log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) from:",
                  "details": [
                     {
                        "value": 1.0,
                        "description": "docFreq",
                        "details": []
                     },
                     {
                        "value": 5.0,
                        "description": "docCount",
                        "details": []
                      }
                   ]
               },
                {
                  "value": 1.2222223,
                  "description": "tfNorm, computed as (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)) from:",
                  "details": [
                     {
                        "value": 1.0,
                        "description": "termFreq=1.0",
                        "details": []
                     },
                     {
                        "value": 1.2,
                        "description": "parameter k1",
                        "details": []
                     },
                     {
                        "value": 0.75,
                        "description": "parameter b",
                        "details": []
                     },
                     {
                        "value": 5.4,
                        "description": "avgFieldLength",
                        "details": []
                     },
                     {
                        "value": 3.0,
                        "description": "fieldLength",
                        "details": []
                     }
                  ]
               }
            ]
         }
      ]
   }
}

所有参数:

_source:设置为true以检索所解释文档的_source。您还可以使用_source_include_source_exclude 检索部分文档。

stored_fields:允许控制哪些存储的字段作为所解释文档的一部分返回。

routing:在索引期间使用路由的情况下控制路由。

parent:与设置路由参数的效果相同。

preference:控制执行解释的分片。

source:允许将请求的数据放入url的查询字符串中。

q:查询字符串(映射到query_string查询)。

df:在查询中未定义字段前缀时使用的默认字段。默认为_all字段。

analyzer:分析查询字符串时要使用的分析器名称。默认为_all字段的分析器。

analyze_wildcard:是否应分析通配符和前缀查询。默认为false。

lenient:如果设置为true将导致忽略基于格式的失败(如向数字字段提供文本)。默认为false。

default_operator:要使用的默认运算符可以是AND或OR。默认为OR。

3.版本(Version)

返回每个搜索匹配的版本。

GET /_search
{
    "version": true,
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

4.最小分数(min_score)

排除_score小于min_score中指定的最小值的文档:

GET /_search
{
    "min_score": 0.5,
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

参考:es官方文档