elasticsearch搜索类型简单介绍
Posted jhcelue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch搜索类型简单介绍相关的知识,希望对你有一定的参考价值。
简单搜索
GET
请求很easy——你能轻松获取你想要的文档。让我们来进一步尝试一些东西。比方简单的搜索!
我们尝试一个最简单的搜索所有员工的请求:
GET /megacorp/employee/_search
接下来。让我们搜索姓氏中包括“jake”的员工。
要做到这一点,我们将在命令行中使用轻量级的搜索方法。
这样的方法常被称作查询字符串(query string)搜索。由于我们像传递URL參数一样去传递查询语句:
GET /megacorp/employee/_search?q=last_name:jake
我们在请求中依然使用_search
keyword,然后将查询语句传递给參数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
以上是关于elasticsearch搜索类型简单介绍的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch:如何在 Elasticsearch 中正确使用同义词功能
Elasticsearch java api 基本搜索部分详解