ElasticSearch Server 扩展的弹性搜索解决方案

Stella981
• 阅读 592

不要失去信心,只要坚持不懈,就终会有成果的。

ElasticSearch Server 扩展的弹性搜索解决方案

ElasticSearch REST API 操作:

GET 获取所请求的对象状态

POST改变当前对象状态

PUT 创建对象

DELETE 销毁对象

概念:

索引(相当数据库,包含行(代表文档)和列(字段)的表)、副本(用于控制查询性能及数据故障)、分片(每个分片就是一个Lucene索引)

通用属性:

index_name:该属性存储在索引中字段的名称,不指定默认为字段定义的对象名称

index:该属性取值为analyzed或no,字符串也可以设置成not_analyzed,设置analyzed该字段被索引,可以被搜索,设置no该字段不能被搜索,字符串设置为not_analyzed该字段可以被搜索但是不分析,只能原样搜索。

store:取值为no或yes,标注该字段是否存储原始值,即使没有指定原始值也可以通过_source返回

boost:默认1,表示该字段在文档中的重要性,分数越高越重要

null_value:表示该字段在文档中不存在时应写入何值

include_in_all:该属性指定某字段是否包含到_all字段中

字段类型:字符型、数值型、布尔型、二进制型、multi_field类型

分词器:内置分词器(eg:standard、simple、keyword等)、自定义分词器

模板:可应用到所有索引,存放到config/templates/目录下,模板之间可覆盖

路由:routing参数(put数据时指定)、_routing字段(定义字段指定,相比routing参数要慢一些)

别名:可以为一个索引或多个索引定义另一个名字,也支持过滤别名(支持filter指定数据用于别名)

过滤器支持缓存 _cache参数

搜索数据:简单查询、复合查询、排序、支持调用脚本config/scripts目录下

支持数据类型:对象、数组、高亮、处理文件、自动补全、地址位置

简单查询:

#通过URI请求查询

GET /library/book/_search?q=title:crime&pretty=true

#term 查询 term查询不被解析,只能精确查询,可以指定多个索引、多个类型

GET /library/book/_search?pretty=ture ' -d '

{

"query": {

"term": {

"title": {

"value": "crime"

}

}

}

}

#分页和结果规模

GET /library/_search?pretty=true '-d'

{

"from": 0,

"size": 3,

"query": {

"term": {

"title": {

"value": "the"

}

}

}

}

#返回版本号

GET /library/_search?pretty=true '-d'

{

"version": true,

"query": {

"term": {

"title": {

"value": "crime"

}

}

}

}

#限制结果分数,添加min_score设置最小分数,高于0.60的文档

GET /library/_search?pretty=true '-d'

{

"min_score":0.60,

"query": {

"term": {

"title": {

"value": "crime"

}

}

}

}

#指定搜索位置

GET /library/_search?preference=_local

{

"query": {

"term": {

"title": {

"value": "crime"

}

}

}

}

#term查询 不被解析,匹配精确的词项,指定boost属性查询权重10倍

GET library/_search?pretty

{

"query": {

"term": {

"title": {

"value": "crime",

"boost": 10

}

}

}

}

#terms查询,minimum属性设置为1,至少匹配一个词项,为2需同时包含2个词项

GET library/_search?pretty

{

"query": {

"terms": {

"tags": [

"novel",

"book"

]

}

}

}

#match查询,提取查询参数中给定的值,分析这些值,匹配包含crime and 或punishment的所有文档

GET library/_search?pretty

{

"query": {

"match": {

"title": "Crime and punishment"

}

}

}

#布尔match查询

GET library/_search?pretty

{

"query": {

"match": {

"title":{

"query": "crime and punishment"

, "operator": "and"

}

}

}

}

#match_phrase 查询,与布尔区别是构造一个短语查询,slop查询短语中间隔几个未知单词算匹配成功

GET library/_search?pretty

{

"query": {

"match_phrase": {

"title": {

"query": "crime and punishment",

"slop": 12

}

}

}

}

#match_phrase_prefix

GET library/_search?pretty

{

"query": {

"match_phrase_prefix": {

"title": {

"query": "crime and punishment",

"slop": 1,

"max_expansions": 10

}

}

}

}

#multi_macth查询,查询作用到多个字段上

GET library/_search?pretty

{

"query": {

"multi_match": {

"query": "crime and punishment",

"fields": ["title","otitle"]

}

}

}

#query_string查询,支持lucene所有查询语法

GET library/_search?pretty

{

"query": {

"query_string": {

"default_field": "title",

"query": "title:crime^10 +title:punishment -otitle:cat"

}

}

}

GET library/_search?pretty

{

"query": {

"query_string": {

"fields": ["title","otitle"],

"query": "crime punishment",

"use_dis_max": true

}

}

}

#ids 查询

GET library/_search?pretty

{

"query": {

"ids": {

"values": ["10","11","12"]

}

}

}

#prefix 查询,类似于term查询,类似与多term查询

GET library/_search?pretty

{

"query": {

"prefix": {

"title": {

"value": "cri"

}

}

}

}

#fuzz 查询基于模糊串,计算给定词项与文档的编辑距离来得到结果,该类查询对CPU资源消耗是昂贵的,对模糊匹配场景很实用

GET library/_search?pretty

{

"query": {

"fuzzy": {

"title": "cirme"

}

}

}

#match_all 查询匹配索引中所有文档的简单查询

GET library/_search?pretty

{

"query": {

"match_all": {}

}

}

#wildcard查询允许使用*和?通配符

GET library/_search?pretty

{

"query": {

"wildcard": {

"title": {

"value": "cr*e"

}

}

}

}

#range 查询

GET library/_search?pretty

{

"query": {

"range": {

"year": {

"gte": 1700,

"lte": 1900

}

}

}

}

##########过滤器(不影响打分)#####

#range过滤器

GET library/_search?pretty

{

"post_filter": {

"range": {

"year": {

"gte": 1930,

"lte": 1990

}

}

}

}

#exists过滤器 有指定字段的文档

GET library/_search?pretty

{

"post_filter": {

"exists": {

"field": "year"

}

}

}

#script过滤器(error)

GET library/_search?pretty

{

"post_filter": {

"script": {

"script":"now - doc['year'].value >100"

, "params": {

"now":2019

}

}

}

}

#limit过滤器,限制每个分片返回文档数目(error)

GET library/_search?pretty

{

"post_filter": {

"limit": {

"value": 1

}

}

}

#ids过滤器 得到标识符为2个文档

GET library/_search?pretty

{

"post_filter": {

"ids": {

"type": ["book"],

"values": [

"2"

]

}

}

}

#过滤器组合 bool、and、or和not过滤器(error,重点在搞一下)

GET library/_search?pretty

{

"post_filter": {

"not": {

"and":[{

"term":{

"title":"crime"

}

},

{

"or":[

{

"range":{

"year": {

"gte": 1930,

"lte": 1990

}

}

},{

"term":{

"available":true

}

}

]

}]

}

}

}

############组合查询############

#bool查询

#should 可以匹配也可以不匹配

#must 必须在返回的文档上匹配上

#must_not 不能在返回的文档上匹配上

GET library/_search?pretty

{

"query": {

"bool": {

"must": [

{"term": {

"title": {

"value": "crime"

}

}}

],

"should": [

{

"range": {

"year": {

"gte": 1900,

"lte": 2000

}

}

}

],

"must_not": [

{

"term": {

"otitle": {

"value": "nothing"

}

}

}

]

}

}

}

#constant_score 查询,该查询用于封装另一个查询(过滤器),返回的每个文档都得到一个恒定值

GET library/_search?pretty

{

"query": {

"constant_score": {

"query": {

"term": {

"title": {

"value": "crime"

}

}

},

"boost": 1.2

}

}

}

#indices查询,支持在多个索引中查询

##########数据排序##########

#默认排序

GET library/_search?pretty

{

"query": {

"terms": {

"title": [

"crime",

"front",

"punishment"

]

}

}

, "sort": [

{

"_score": {

"order": "asc"

}

}

]

}

#error

POST library/book/ '-d'

{

"title":{

"type":"multi_field",

"fields":{

"title":{"type":"text"},

"sort":{"type":"text","index":"not_analyzed"}

}

}

}

#高亮,默认

GET library/_search?pretty

{

"query": {

"term": {

"title": {

"value": "crime"

}

}

}

, "highlight": {

"pre_tags": [""],

"post_tags": [""],

"fields": {

"title": {}

}

}

}

GET library/_search?pretty

{

"query": {

"term": {

"title": {

"value": "crime"

}

}

}

, "highlight": {

"fields": {

"title": {"pre_tags": [""],"post_tags": [""]}

}

}

}

GET library/_search?pretty

{

"query": {

"constant_score": {

"filter": {

"query_string": {

"query": "available:false author:heller"

}

},

"boost": 5

}

}

}

GET /library/_search

{

"query": {

"match_all": {}

}

}

#添加属性字段

PUT /library/book/_mapping

{

"properties": {

"name":{"type": "text","store": true,"index": true}

}

}

#创建嵌套文档

PUT /library/book/_mapping

{

"properties": {

"variation":{

"type": "nested",

"properties": {

"size":{"type": "text","store": true,"index": true},

"color":{"type": "text","store": true,"index": true}

}

}

}

}

PUT /library/book/6

{

"title":"The Book",

"author":"Test author",

"name":" the Sorec ",

"variation":[

{"size":"xxl","color":"red"},

{"size":"xxxl","color":"green"}

]

}

GET /library/book/_search/

{

"query": {

"nested": {

"path": "variation",

"query": {

"bool": {

"must": [

{"term": {"variation.size": "xxl"}},

{"term": {"variation.color": "red"}}

]

}

}

}

}

}

有问题欢迎留言讨论。

本文分享自微信公众号 - 大数据与微服务架构(gh_7bc8d3796e8e)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这