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—索引,一个索 ...
 
随机推荐
- hdu6568  Math (概率dp)
			
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6568 题意: 在$0$到$L$的坐标轴运输货物,在每个整数点可能丢失货物,丢失概率为$p$,丢失后可 ...
 - 8.5 JavaScript的BOM(二)
			
8.5 JavaScript的BOM 即 浏览器对象模型(Browser Object Model) 浏览器对象包括 一.Window(窗口) 如果需要打开一个新的网站,应该通过超级链接等方式让用户主 ...
 - 面试题:this指针的指向,以及call、apply应用
			
var a = 2; function test(){ var a = 4; console.log(this.a); this.a = 1; } test();//2 //这里为什么是2?因为调用t ...
 - Nginx之配置文件的解析
			
1. ngx_command_t 为了统一配置项目的解析,Nginx 定义了如下数据类型对所有的 Nginx 配置项进行了统一的描述. typedef struct ngx_command_s ngx ...
 - leetcode-hard-array-179 Largest Number-NO
			
mycode 写的很复杂,还报错... 参考: class Solution: # @param {integer[]} nums # @return {string} def largestNum ...
 - scikit-learn:CountVectorizer提取tf都做了什么
			
from: https://blog.csdn.net/mmc2015/article/details/46866537 http://scikit-learn.org/stable/modules/ ...
 - Hibernate3疑惑解决
			
1.session的get()和load()有什么区别? # get()如果没有找到持久化类返回null,有可能导致空指针异常. # load()如果没有找到持久化类直接抛出异常. ...
 - GCC4.7+中如何替代C11中的_Generic
			
C11标准中,一个非常重大的特性更新就是增加了Generic Selection这个特性.这个特性能使得C11支持轻量级的泛型编程,使得可以把一组具有不同类型而却有相同功能的函数抽象为一个接口. 对于 ...
 - Python - 二叉树, 堆, headq 模块
			
二叉树 概念 二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树), 或者由一个根结点和两棵互不相交的.分别称为根结点的左子树和右子树组成. 特点 每个结点最多有两颗子树,所 ...
 - 一百一十五:CMS系统之实现点击更换图形验证码功能
			
把验证码渲染到到页面上 访问,显然,是标签有个内边距 去掉内边距 加一个class 如果放大看的话,还有问题 用js实现点击更换图形验证码:生成查询字符串的形式访问图形验证码接口的url,放到img标 ...