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—索引,一个索 ...
随机推荐
- spring事务之事务传播机制和隔离级别
Spring事务传播行为 运用Spring事务,必须要深入理解它的传播机制,否则会遇到各种意想不到的坑,Spring定义了七种传播行为. public interface TransactionDef ...
- JavaScript设计模式—装饰器模式
装饰器模式介绍 为对象添加新的功能,不改变其原有的结构和功能,原有的功能还是可以使用,跟适配器模式不一样,适配器模式原有的已经不能使用了,装饰器示例比如手机壳 UML类图和代码示例 Circle示原来 ...
- flask 第九篇 蓝图 Blueprint
蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查看 ...
- python并发——进程间同步和通信
一.进程间同步 对于一些临界资源,不能使用并发无限消耗,就需要设置专门的临界标示,比如锁或者信号量等 from multiprocessing import Process, Lock import ...
- Netfilter 之 连接跟踪初始化
基础参数初始化 nf_conntrack_init_start函数完成连接跟踪基础参数的初始化,包括了hash,slab,扩展项,GC任务等: int nf_conntrack_init_start( ...
- php中pack、unpack的详细用法
详见: https://segmentfault.com/a/1190000008305573?utm_source=tag-newest
- Beta冲刺(1/5)
队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 验收游戏素材 学习Unity 2D Animation系统 接下来的计划 制作游戏需要的人物动画 ...
- fastadmin编辑内容,有下拉选择关联的内容,自定义的参数去获取相应的下拉内容
1.可以到你的编辑页面中添加自定义条件 data-params='{"custom[shop_id]":"2"}'
- mha之vip漂移 配置binlog-server备份服务器 Atlas
MHAvip漂移 配置 通过MHA自带脚本方式,管理虚拟IP的漂移 获取管理脚本master_ip_failover cp master_ip_failover /usr/local/bin/ #脚本 ...
- Python数据分析中 DataFrame axis=0与axis=1的理解
python中的axis究竟是如何定义的呢?他们究竟代表是DataFrame的行还是列? 直接上代码people=DataFrame(np.random.randn(5,5), columns=['a ...