Elastic Search对Document的搜索
在ES中使用的重点。ES中存储的数据。核心就是为了提供全文搜索能力的。搜索功能非常重要。多练。
1 query string search
search的参数都是类似http请求头中的字符串参数提供搜索条件的。
GET [/index_name/type_name/]_search[?parameter_name=parameter_value&...]
如: 全数据搜索。也就是没有搜索条件。
GET /test_index/my_type/_search
结果:
{
"took": 8, # 执行的时长。单位毫秒。
"timed_out": false, # 是否超时
"_shards": { # shard 相关数据
"total": 5, # 总计多少个shard
"successful": 5, # 成功返回结果的shard数量
"skipped": 0,
"failed": 0
},
"hits": { # 搜索结果相关数据,
"total": 3, # 总计多少数据,符合搜索条件的数据数量。
"max_score": 1, # 最大相关度分数。和搜索条件的匹配度。
"hits": [ # 具体的搜索结果
{
"_index": "test_index", # 索引名称
"_type": "my_type", # 类型名称
"_id": "2", # id值
"_score": 1, # 匹配度分数,本条数据匹配度分数
"_source": { # 具体的数据内容,源
"name": "test_doc_02",
"remark": "second test elastic search",
"order_no": 2
}
}
]
}
}
GET /index_name/type_name/_search?q=field_name:key_word&sort=field_name:order
如:
GET /test_index/my_type/_search?q=remark:test&sort=order_no:desc
结果:
{
"took":17,
"timed_out":false,
"_shards":{
"total":5,
"successful":5,
"skipped":0,
"failed":0
},
"hits":{
"total":3,
"max_score":null,
"hits":[
{
"_index":"test_index",
"_type":"my_type",
"_id":"3",
"_score":null,
"_source":{
"name":"test_doc_03",
"remark":"third test elastic search",
"order_no":3
},
"sort":[
3
]
},
{
"_index":"test_index",
"_type":"my_type",
"_id":"2",
"_score":null,
"_source":{
"name":"test_doc_02",
"remark":"second test elastic search",
"order_no":2
},
"sort":[
2
]
},
{
"_index":"test_index",
"_type":"my_type",
"_id":"1",
"_score":null,
"_source":{
"name":"test_doc_01",
"remark":"first test elastic search",
"order_no":1
},
"sort":[
1
]
}
]
}
}
注意:此搜索操作一般只用在快速检索数据使用,如果查询条件复杂,很难构建query string。生产环境中很少使用。如:要求搜索条件为商品名称包含手机,价格在1000~5000之间,销量在每月500以上,根据价格升序排列,分页查询第二页,每页40条数据。
?q=xxxx:xxx&range=xxx:xxx:xxx&aggs&sort&from&size
2 query DSL
DSL - Domain Specified Language , 特殊领域的语言。
GET /index_name/type_name/_search
{
"commond":{ "parameter_name" : "parameter_value"}
}
如:查询所有数据
GET /test_index/my_type/_search
{
"query" : { "match_all" : {} }
}
如:条件查询,排序
GET /test_index/my_type/_search
{
"query" : {
"match" : {
"remark" : "test"
}
},
"sort" : [
{ "order_no" : "asc" }
]
}
如:分页查询
GET /test_index/my_type/_search
{
"query" : { "match_all" : {} },
"from" : 1, # 从第几条数据开始查询,从0开始计数
"size" : 2, # 查询多少数据。
"sort" : [
{ "order_no" : "asc" }
]
}
如:查询部分字段
GET /test_index/my_type/_search
{
"query": {
"match": {
"tags": "java"
}
},
"sort": [
{
"age": {
"order": "desc"
}
}
],
"_source": ["name", "tags"],
"from": 1,
"size": 1
}
注意:此搜索操作适合构建复杂查询条件,生产环境常用。
3 query filter
过滤查询。此操作实际上就是query DSL的补充语法。过滤的时候,不进行任何的匹配分数计算,相对于query来说,filter相对效率较高。Query要计算搜索匹配相关度分数。Query更加适合复杂的条件搜索。
如:使用符合条件查询。搜索tags中包含java字符串的数据,且年龄在20~25之间。
不使用filter, 年龄需要计算相关度分数GET /test_index/my_type/_search
{
"query": {
"bool": { # 多条件搜索,内部的若干条件,只要有正确结果,即可。
"must": [ # 必须,内部若干条件,必须都匹配才有结果
{"match": { # 匹配, 字段中必须匹配对应数据才有结果
"tags": "java"
}},
{"range": { # 范围, 字段的数据必须满足某范围才有结果。
"age": {
"gte": 20, # 比较符号 lt gt lte gte
"lte": 25
}
}}
]
}
}
}
使用filter, 假设年龄不需要计算任何的相关度分数。
GET /test_index/my_type/_search
{
"query": {
"bool": { # 多条件搜索,内部的若干条件,只要有正确结果,即可。
"must": [ # 必须,内部若干条件,必须都匹配才有结果
{"match": { # 匹配, 字段中必须匹配对应数据才有结果
"tags": "java"
}},
{"range": { # 范围, 字段的数据必须满足某范围才有结果。
"age": {
"gte": 20, # 比较符号 lt gt lte gte
"lte": 25
}
}}
]
}
}
}
4 full-text search
全文检索。要求查询条件拆分后的任意词条与具体数据匹配就算搜索结果。查询结果顺序默认与匹配度分数相关。
搜索 tags中包含 java php .net的数据。
GET /test_index/my_type/_search
{
"query": {
"match": {
"tags": "java php .net sales"
}
}
}
5 phrase search
短语检索。要求查询条件必须和具体数据完全匹配才算搜索结果。
GET /test_index/my_type/_search
{
"query": {
"match_phrase": {
"tags": "java developer"
}
}
}
6 highlight display
高亮显示。高亮不是搜索条件,是显示逻辑。在搜索的时候,经常需要对条件实现高亮显示。
GET /test_index/my_type/_search
{
"query": {
"match": {
"tags": "java sales developer"
}
},
"highlight": {
"fields": {
"tags": {
"number_of_fragments": 1,
"fragment_size": 1
}
}
}
}
Elastic Search对Document的搜索的更多相关文章
- Elastic Search中Document的CRUD操作
一. 新增Document在索引中增加文档.在index中增加document.ES有自动识别机制.如果增加的document对应的index不存在.自动创建,如果index存在,type不存在自动创 ...
- Elastic Search 小调研
一.概况: Elastic Search 是一个基于Apache Lucene™工具包的开源搜索引擎.无论在开源还是专有领域,Lucene 可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库 ...
- 教你用Elastic Search:运行第一条Hello World搜索命令
摘要:Elastic Search可实时对数据库进行全文检索.处理同义词.从同样的数据中生成分析和聚合数据. 本文分享自华为云社区<Elastic Search入门(一): 简介,安装,运行第一 ...
- SpringMVC项目使用elastic search搜索
项目需要,引入了elastic search(后续简称es),后面将介绍本地对es的安装,使用以及java连接es查询的整个过程. 1.es索引字段建立与修改,以curl新增一个索引字段示例 curl ...
- Elastic Search快速上手(2):将数据存入ES
前言 在上手使用前,需要先了解一些基本的概念. 推荐 可以到 https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.htm ...
- Elastic Search常用元数据简介
在ES中,除了定义的index,type,和管理的document外,还有若干的元数据.这些元数据用于记录ES中需要使用的核心数据.在ES中,元数据通常使用下划线’_’开头. 1 查看数据GET /i ...
- Elastic Search笔记
目录 1.简介 2.概念和工具使用 2.1 基本概念 2.2 使用kibana 3.操作索引和数据 2.3 索引 2.4 索引映射到文档 2.5 新增数据 2.6 修改数据 2.7 删除数据 4. 搜 ...
- elastic search book [ ElasticSearch book es book]
谁在使用ELK 维基百科, github都使用 ELK (ElasticSearch es book) ElasticSearch入门 Elasticsearch入门,这一篇就够了==>http ...
- 初识Elastic search—附《Elasticsearch权威指南—官方guide的译文》
本文作为Elastic search系列的开篇之作,简要介绍其简要历史.安装及基本概念和核心模块. 简史 Elastic search基于Lucene(信息检索引擎,ES里一个index—索引,一个索 ...
随机推荐
- layer是一款近年来备受青睐的web弹层组件
layer.closeAll(); //疯狂模式,关闭所有层 layer.closeAll('dialog'); //关闭信息框 layer.closeAll('page'); //关闭所有页面层 l ...
- django 快速搭建blog(三)
http://www.cnblogs.com/fnng/p/3737964.html 引用自此博客 创建blog的公共部分 从Django的角度看, 一个页面 具有三个典型的组件: 一个模板(temp ...
- CISCO实验记录一:路由器基本配置
一.路由器基本配置要求 1.设置路由器名为:hehe 2.设置特权模式下password为ccna,secret为ccnp,vty线路密码为ccie 3.所有明文密码都加密 二.路由器基本配置命令 1 ...
- 2.1 Go语言基础之运算符
运算符用于在程序运行时执行数学或逻辑运算. 一.运算符 Go 语言内置的运算符有: 1. 算术运算符 2. 关系运算符 3. 逻辑运算符 4. 位运算符 5. 赋值运算符 1.1 算数运算符 运算符 ...
- Win10+VS2017配置pthread
0.pthread源码下载:https://sourceware.org/pthreads-win32/ 1.下载pthreads-w32-2-9-1-release.zip完毕后,解压,内容如下 其 ...
- js 操作select和option常见用法
1.获取选中select的value和text,html <select id="mySelect"> <option value="1"&g ...
- vector subscript out of range
报这个错时会弹出一个窗口,貌似内存溢出,这是什么由于vector存放的数据超出了vector的大小所造成的. 解决方法如下: 在Vector<string> vector之后,不能直接通过 ...
- a lot of attention under the hood
Because one of the original goals of the Node.js project was to allow developers to easily build app ...
- 一百二十四:CMS系统之首页导航条和代码抽离
模板抽离 由于前后台的模板有些需要的元素如,js,css是相同的,这里抽离出来做base模板 {% from "common/_macros.html" import static ...
- MFS分布式文件系统
一.MFS概述: MooseFS(moose 驼鹿)是一款网络分布式文件系统.它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源.MFS也像其他类unix文件系统一样,包含了层级结构(目录树 ...