1、过滤器与查询
过滤器是不计算评分, 而查询需要
使用bool的filter
2、高亮显示
形式为
{
"highlight": {
"fields": {
"title": {}
}
}
}
2.1 高亮类型
支持三种类型的高亮
unified | lucene unified高亮。将文本打散成名子,使用BM25算法来给句子打分。 |
plain | 标准的。用于反映查询匹配逻辑。 |
fvh | 快速向量高亮。可以使用mapping中的term_vector和with_positions_offsets |
2.2 高亮参数
高亮的支持的设置有
boundary_chars | 边界字符串。默认是.,!? \t\n |
boundary_max_scan | 扫描边界字符串的长度。默认是20 |
boundary_scanner | 指定如何打断突出显示的片段:chars,sentence或者word。仅用于unified和fvh高亮。对unified高亮默认是sentence。对fvh高亮默认是chars |
boundary_scanner_locale | 控制用于搜索句子和单词边界的区域设置. |
encoder | 指示代码段是否应为HTML编码:default或者html |
fields | 指定要为其检索高光的字段。可以使用通配符来指定字段。 |
force_source | 基于源高亮显示,即使字段单独存储。默认是false |
fragmenter | 指定如何在突出显示片段中拆分文本:simple或者span。仅适用于plain高亮。默认是span |
fragment_offset | 控制要从中开始高亮显示的边距。仅适用于fvh高亮 |
fragment_size | 突出显示的片段的大小(以字符为单位)。默认是100 |
highlight_query | 突出显示搜索查询以外的查询的匹配项。对于rescore查询特别有用,因为默认这些在高亮中没有被考虑。 |
matched_fields | 组合多个字段上的匹配项以突出显示单个字段。 |
no_match_size | 如果没有要突出显示的匹配片段,则返回从字段开头的文本量。默认是0 |
number_of_fragments | 最大片段数。 |
order | 当设置为score时则根据分数对高亮片段排序。默认是none. |
phrase_limit | 控制文档中匹配短语数。防止fvh高亮分析过多短语浪费过多内存。默认是256 |
pre_tags | 与post_tags一起使用来定义高亮的html标签。默认是<em>和</em>。指定字符串数组。 |
post_tags | 与pre_tags一起使用来定义高亮的html标签。默认是<em>和</em>。指定字符串数组。 |
require_field_match | 默认仅仅包含查询匹配的字段才高亮。当设置为false时,则高亮所有字段。默认是true |
max_analyzed_offsest | 默认分析高亮的最大字符由index.highlight.max_analyzed_offset的值限制。 |
tags_schema | styled使用内置的标签。 |
type | unified,plain和fvh。默认是unified。 |
2.3 高亮查询
在highlight下配置hight_query段,其下面可以使用查询子句
3、校验
使用_validate/query端
curl 'localhost:9200/library/_validate/query?pretty' -d '{"query":{"bool":{"must":{"term":{"title":"crime"}},"should":{"range":{"year":{"gte":1900,"lte":2000}}},"must_not":{"term":{"otitle":"nothing"}}}}}' -H "Content-Type:application/json"
输出为
4、排序
4.1 默认排序
默认是基于_score降序
4.2 排序支持的值
order支持的值
asc | 基于其它字段(不包括_score)默认是升序 |
desc | 对于_score默认是降序 |
4.3 排序模式
对于数组或者多字段时,mode支持的值有
min | 选取最小值 |
max | 选取最大值 |
sum | 使用所有值的和来排序 |
avg | 使用平均值来排序 |
median | 使用中值来排序 |
4.4、缺省值
missing参数指定缺少排序字段时docs如何处理。支持_last,_first。默认是_last
4.5 nested对象
nested排序选项有以下属性
path | 定义在哪个嵌套对象上排序 |
filter | 嵌套路径中的内部对象应与之匹配的筛选器,以便通过排序考虑其字段值 |
max_children | 选择排序值时,每个根文档要考虑的最大子文档数。默认无限制 |
nested | 与顶层nested一样。在当前嵌套对象中应用另外一个嵌套路径 |
4.6 忽略未映射字段
默认,如果字段没有映射,搜索会失败。unmapped_type选项允许你忽略没有映射的字段,不通过它排序。此参数的值用于确定要发出的排序值
4.7 geo distance排序
根据_geo_distance排序。支持的参数有
distance_type | 如何计算距离。可取的值为arc或者plane |
mode | 字段有geo points时做什么。默认升序时考虑最短距离,降序时考虑最长距离。支持的值有min,max,median和avg |
unit | 计算排序值是使用的单位。默认是m |
ignore_unmapped | 表示是否将未映射字段作缺少值对待。当设置为true时相当于指定unmapped_type。默认值是false |
4.8 基于脚本排序
GET /_search
{
"query": {
"term": { "user": "kimchy" }
},
"sort": {
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": "doc['field_name'].value * params.factor",
"params": {
"factor": 1.1
}
},
"order": "asc"
}
}
}
4.9 跟踪分数
使用track_scores。当排序字段时不计算分数。设置track_scores为true,会计算分数并且跟踪。
GET /_search
{
"track_scores": true,
"sort" : [
{ "post_date" : {"order" : "desc"} },
{ "name" : "desc" },
{ "age" : "desc" }
],
"query" : {
"term" : { "user" : "kimchy" }
}
}
5、查询重写
field下的参数rewrite,其支持的值为
constant_score | 对较少的匹配项使用constant_score_boolean |
constant_score_boolean | 为每个文档分配一个与boost参数相等的相关性分数。这个方法将原始查询改为bool查询。bool查询包含should语句和term查询 |
scoring_boolean | 为匹配文件计算相关分数。 |
top_terms_blended_freqs_N | 计算每个匹配文档的相关性得分,就像所有术语具有相同的频率一样。此频率是所有匹配项的最大频率 |
top_terms_boost_N | 分配匹配项等于boost参数的相关分数 |
top_terms_N | 计算每个匹配文档的相关性分数 |