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—索引,一个索 ...
随机推荐
- Mybatis源码学习之整体架构(一)
简述 关于ORM的定义,我们引用了一下百度百科给出的定义,总体来说ORM就是提供给开发人员API,方便操作关系型数据库的,封装了对数据库操作的过程,同时提供对象与数据之间的映射功能,解放了开发人员对访 ...
- art-template自定义函数
自定义函数 // 百分比计算 template.defaults.imports.percentage = function (num1, num2) { var res; if(!num1 & ...
- mysql zip方式安装
下载zip文件解压到安装目录,此时是没有data文件夹和my.ini文件的. 1.首先自己新建my.ini,内容如下: [client] port=3306 default-character-set ...
- Golang语言快速上手到综合实战高并发聊天室
需要的联系我:QQ:1844912514 Go是Google开发的一种编译型,可并行化,并具有垃圾回收功能的编程语言.2015,Go迎来了全迸发的一年.时隔一年,回头再看,Go已跻身主流编程语言行列. ...
- Difference between C# compiler version and language version
Difference between C# compiler version and language version As nobody gives a good enough answer ...
- Django连接MySQL出错
错误一:No module named 'MySQLdb' 原因:python3连接MySQL不能再使用mysqldb,取而代之的是pymysql. 解决方法:在python的MySQL包中,即路径: ...
- 自定义 TreeView 第三种状态(C#自定义控件)
本文核心部分采用 http://blog.csdn.net/am2004/article/details/1621349 此网站代码. 在增加了部份事件的同时,将点击图片更改节点选中状态 这一小地方作 ...
- apache整合tomcat中的一些注意事项
1.整合完毕后,需要把项目同时部署在apache和tomcat中,不然会报错找不到资源 2.可以把tomcat和apcahe的项目路径设置为同一个 3.使用java框架时容易出现异常:The requ ...
- AngularJS 指令(Directivce )一
指令(Directive),是AngularJS中一块比较重要的内容,在实践中,我们提倡将控制器(Controller)写得短小精悍,逻辑代码尽量少,要实现这种目的,我们主要通过将逻辑代码抽取到服务( ...
- java 语言实现豆瓣电影信息查询
豆瓣上面有很多电影,有时候要查看个电影信息,去豆瓣搜下还是很方便的,但是如何通过接口的形式来查看豆瓣电影,这对于很多网站.app其实是非常实用的功能,这里笔者附上一个java实现的豆瓣电影信息获取的代 ...