elasticsearch之查询扩展

1、过滤器与查询

过滤器是不计算评分, 而查询需要 

使用bool的filter

2、高亮显示 

形式为

{
    "highlight": {
        "fields": {
            "title": {}
        }
    }
}

2.1 高亮类型

支持三种类型的高亮

unifiedlucene 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_schemastyled使用内置的标签。
typeunified,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计算每个匹配文档的相关性分数

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值