目录
{
"version":true,
"min_score":0.75,
"fields":["a", "b"],
"query":{
...
}
}
定制字段的返回,从性能角度考虑,不如直接返回_source
通过search_type设置,请求类型是:
参数值 | 描述 |
---|---|
_primary | 只在主分片上执行搜索,不使用副本。 |
_primary_first | 如果主分片可用,只在主分片上搜索,否则在其他分片执行 |
_local | 只在发送请求的节点上的可用分片上执行搜索 |
_only_node:node_id | 只在提供标示符的节点上搜索 |
_prefer_node:node_id | Elasticsearch尝试在提供标示符的节点上搜索,否则,使用其他节点 |
_shards:1,2 | 在提供标示符的分片上执行,可以和其他首选项合并,但_shards必须在前。_shards:1,2;_local |
自定义值 | 传入自定义的字符串 |
此外,elasticsearch还支持:前缀查询,模糊查询,通配符查询,正则查询
词条和多词条查询elasticsearch没有分析过程。
过滤器缓存:有些过滤器是默认缓存的,有些过滤器则不能缓存(即使打开也是无效的)。通过_cache参数设置
Lucene提供了三种类型的高亮实现:标准类型;FastVectorHighlighter,它需要词向量和位置才能工作;PostingsHighlighter,信息高亮器(字段定义中的index_options属性设为offsets),对单个词条的查询更智能,匹配句子结束边界。
Elasticsearch会自动选择正确的高亮实现方式,如果字段的配置中,term_vector属性设成了with_positings_offsets,则将使用FastVectorHighlighter。使用词向量将导致索引变大,但高亮执行时间更少,对于存储大量数据的字段来说,推荐使用FastVectorHighlighter
高亮的所有设置既可以在所有字段上设置,也可以针对某个字段单独设置(全局控制和局部控制)。
require_field_match控制高亮的字段只与查询时指定的字段对应,不会显示其他字段的符合条件的高亮信息。
number_of_fragments:返回高亮片段的数量,默认是5。如果设置为0,整个字段将会返回,对于短字段可以这样设置。
fragment_size:高亮片段的最大字符长度,默认值是100
ES查询时把请求发送到_search端点,有时候不知道DSL或定义语句是否正确时,将请求发送到_validate_query端点验证请求的正确性(有的错误请求无返回结果,这时无法判断是没有符合要求的数据还是请求错误)。
验证的命令如下
curl -XGET ‘localhost:9200/index/_validate/query?pretty&explain‘ --data-binary @query.json
query.json是命令文件
默认的排序是根据得分降序排序,可以通过{"sort":{"_sort":asc}}
对结果升序排序
还可以指定字段进行排序,这个字段最好不要分析。
通过这查询中设置missing可以指定缺失字段在查询结果中的排列位置。
任何涉及多词条的查询,如前缀查询或通配符查询,都会使用查询重写。它把原始的昂贵的查询修改成一组不太昂贵的查询。
Lucene内部的倒排索引机制记录了词条,对查询进行重写的时候,将条件匹配相关的词条,从而改写查询。
{
"query":{
"prefix":{
"title":"s",
"rewrite":"constant_score_boolean"
}
}
}
rewrite指定了重写的策略:
需要性能更好,但忍受低精度选用topN,需要高精度,但忍受低性能选择constant_score_boolean
原文:https://www.cnblogs.com/51zone/p/9697301.html