博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
elasticsearch搜索类型简单介绍
阅读量:6996 次
发布时间:2019-06-27

本文共 1853 字,大约阅读时间需要 6 分钟。

简单搜索

GET请求很easy——你能轻松获取你想要的文档。让我们来进一步尝试一些东西。比方简单的搜索!

我们尝试一个最简单的搜索所有员工的请求:

GET /megacorp/employee/_search

接下来。让我们搜索姓氏中包括“jake”的员工。

要做到这一点,我们将在命令行中使用轻量级的搜索方法。

这样的方法常被称作查询字符串(query string)搜索。由于我们像传递URL參数一样去传递查询语句:

GET /megacorp/employee/_search?

q=last_name:jake

我们在请求中依然使用_searchkeyword,然后将查询语句传递给參数q=。这样就能够得到全部姓氏为jake的结果。

使用DSL语句查询

查询字符串搜索便于通过命令行完毕特定(ad hoc)的搜索,可是它也有局限性(參阅简单搜索章节)。Elasticsearch提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它同意你构建更加复杂、强大的查询。

DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。我们能够这样表示之前关于“jake”的查询:

GET /megacorp/employee/_search{    "query" : {        "match" : {            "last_name" : "jake"        }    }}

这会返回与之前查询同样的结果。

你能够看到有些东西改变了,我们不再使用查询字符串(query string)做为參数。而是使用请求体取代。这个请求体使用JSON表示。当中使用了match语句(查询类型之中的一个。详细我们以后会学到)。

更复杂的搜索

我们让搜索略微再变的复杂一些。我们依然想要找到姓氏为“jake”的员工。可是我们仅仅想得到年龄大于30岁的员工。

我们的语句将加入过滤器(filter),它使得我们高效率的运行一个结构化搜索:

GET /megacorp/employee/_search{    "query" : {        "filtered" : {            "filter" : {                "range" : {                    "age" : { "gt" : 30 } <1>                }            },            "query" : {                "match" : {                    "last_name" : "jake" <2>                }            }        }    }}
  • <1> 这部分查询属于区间过滤器(range filter),它用于查找全部年龄大于30岁的数据——gt为"greater than"的缩写。
  • <2> 这部分查询与之前的match语句(query)一致。

短语搜索

眼下我们能够在字段中搜索单独的一个词,这挺好的,可是有时候你想要确切的匹配若干个单词或者短语(phrases)。比如我们想要查询同一时候包括"rock"和"climbing"(而且是相邻的)的员工记录。

要做到这个,我们仅仅要将match查询变更为match_phrase查询就可以:

GET /megacorp/employee/_search{    "query" : {        "match_phrase" : {            "about" : "rock climbing"        }    }}

高亮我们的搜索

非常多应用喜欢从每一个搜索结果中高亮(highlight)匹配到的keyword,这样用户能够知道为什么这些文档和查询相匹配。在Elasticsearch中高亮片段是非常easy的。

让我们在之前的语句上添加highlight參数。

当我们执行这个语句时,会命中与之前同样的结果,可是在返回结果中会有一个新的部分叫做highlight,这里包括了来自about字段中的文本。而且用<em></em>来标识匹配到的单词。

ps: web怎样做高亮显示,能够參考:http://www.w3school.com.cn/tags/tag_phrase_elements.asp

转载地址:http://hqbvl.baihongyu.com/

你可能感兴趣的文章
浅析Android线程模型一 --- 转
查看>>
Cocos2d-x PluginX (二)增加新的Plugin
查看>>
python-django开发学习笔记四
查看>>
cocos2d-x开发记录:二,基本概念(导演,场景,层和精灵,场景切换,效果)...
查看>>
Binutils工具集中的一些比较常用的工具
查看>>
IoC在ASP.NET Web API中的应用
查看>>
Android手机 Fildder真机抓包
查看>>
jsp里面实现asp.net的Global文件内容。
查看>>
Oracle ROWID
查看>>
(转)为C# Windows服务添加安装程序
查看>>
使用Team Foundation Server 2012源代码管理基本
查看>>
WCF服务通信测试
查看>>
dos命令dir查找文件的用法及实例
查看>>
Hadoop守护进程【简--】
查看>>
fdm_search_info_w_book_chain
查看>>
协方差的意义
查看>>
Windows下Git安装指南
查看>>
[Android 新特性] 15项大改进 Android 4.4新特性解析
查看>>
社会好比一张千层饼
查看>>
面向对象的特征有哪些方面
查看>>