個人Elasticsearch系列文章,逐漸更新中,歡迎關注
0A.關於Elasticsearch及實例應用
00.Solr與ElasticSearch對比
01.ElasticSearch能作什麼?
02.Elastic Stack功能介紹
03.如何安裝與設置Elasticsearch API
04.若是經過elasticsearch的head插件創建索引_CRUD操做
05.Elasticsearch多個實例和head plugin使用介紹
06.當Elasticsearch進行文檔索引時,它是如何工做的?
07.Elasticsearch中的映射方式—簡潔版教程
08.Elasticsearch中的分析和分析器應用方式
09.Elasticsearch中構建自定義分析器
10.Kibana科普-做爲Elasticsearhc開發工具
11.Elasticsearch查詢方法
12.Elasticsearch全文查詢html
另外Elasticsearch入門,我強烈推薦ElasticSearch搭建手冊給你,很是想盡的入門指南手冊。segmentfault
在上一個博客中,咱們看到了Elasticsearch世界中一些重要且使用最普遍的全文查詢。咱們將介紹此博客中一些最有用和最相關的術語級別查詢。
什麼是學期水平查詢?
術語級別查詢是用於根據組織/結構化數據中的確切值查找記錄/文檔的那些查詢。
結構化數據的示例包括產品代碼,日期範圍,PIN碼,IP等。
術語查詢與全文查詢的不一樣之處在於,搜索關鍵字(要搜索的文本)將通過分析過程而後被查詢。與術語查詢執行中同樣,搜索查詢關鍵字將照原樣進行。(注意:關鍵字的標準化能夠經過標準化設置進行,但默認狀況下,搜索查詢關鍵字照原樣進行。)
例如,
若是我使用全文查詢搜索「 Arun Mohan」,則搜索將繼續進行分別爲「阿倫」和「莫漢」。
可是,當我對與上述相同的關鍵字使用術語查詢時,搜索將做爲單個關鍵字完成,而不會拆分爲「 Arun Mohan」自己。
樣本數據集
能夠在此處找到爲此操做執行的數據集。加載CSV的步驟能夠在我之前在Kibana上的博客中找到。我已將數據索引到名爲「 testindexterms」的索引。該索引中的樣本文檔以下所示:elasticsearch
{ "_index" : "testindexterms", "_type" : "_doc", "_id" : "-6Ry3m0B5ZMO9aBbs5Sg", "_score" : 1.0, "_source" : { "id" : "1", "first_name" : "Jasmina", "last_name" : "Crocetto", "email" : "jcrocetto0@odnoklassniki.ru", "gender" : "Female", "ip_address" : "90.139.240.83", "socialSecurity" : "896-40-5515", "age" : "33" } }
基本術語查詢
基本字詞查詢不會在搜索時分析爲其指定的搜索關鍵字。考慮一個示例,讓咱們在「性別」字段上搜索關鍵字「男性」,以下所示:工具
#term query POST testindexterms/_search { "query": { "term": { "gender": { "value": "Male" } } } }上面的查詢將致使返回全部帶有「 gender」字段且值爲「 Male」的文檔。 如今,若是咱們經過將大小寫更改成「 male」來給出相同的查詢,則相同的查詢將不會產生任何結果。 POST testindexterms / _search { 「 query」:{ 「 term」:{ 「 first_name」:{ 「 value」:「 jasmina」 } } } }
這代表在「性別」字段的倒排索引中沒有「男性」值。只有「男」和「女」兩個值(注意大小寫不一樣)。開發工具
條款查詢
在某些狀況下,咱們須要從同一字段中獲取多個搜索關鍵字。咱們能夠針對如下狀況使用術語查詢,如如下示例所示:插件
POST testindexterms/_search { "query": { "term": { "first_name": { "value": "jasmina" } } } }
上面的查詢將在「 first_name」字段上返回與「 Jasmina」和「 Claresta」匹配的文檔
前綴查詢
前綴查詢將返回以單詞模式開頭的文檔。假設咱們須要獲取「 first_name」以「 Ja」開頭的文檔,咱們能夠使用如下前綴查詢:rest
#prefix query POST testindexterms / _search { 「 query」:{ 「 prefix」:{ 「 first_name」:{ 「 value」:「 Ja」 } } } }
範圍查詢
這是Elasticseaerch中使用的最有用和最頻繁的查詢之一。該查詢將向咱們返回包含提供範圍內的術語的文檔。
例如,查找全部年齡在20至40歲之間的僱員。
或者查找全部薪水超過100,000等的僱員。
如下查詢可用於獲取年齡介於20到40歲(包括20到40歲)之間的文檔code
POST testindexterms / _search { 「 query」:{ 「 range」:{ 「 age」:{ 「 gte」:20, 「 lte」:30 } } } }
gte:大於或等於
lte:小於或等於
gt(大於)和lt(小於)選項也可用於肯定範圍。htm
模糊查詢
如今,另外一個常見的用例是搜索單詞並找到結果,而與較小的拼寫問題無關。就像咱們搜索「 Jaems」同樣,結果應返回包含「 James」的文檔。
經過模糊查詢,咱們能夠處理這種狀況。在下面的查詢中,查詢針對字段「性別」給出爲「 Mael」。因爲咱們使用了模糊查詢,所以它將在「性別」字段中提取全部包含「男性」一詞的文檔blog
{ "_index" : "testindexterms", "_type" : "_doc", "_id" : "-6Ry3m0B5ZMO9aBbs5Sg", "_score" : 1.0, "_source" : { "id" : "1", "first_name" : "Jasmina", "last_name" : "Crocetto", "email" : "jcrocetto0@odnoklassniki.ru", "gender" : "Female", "ip_address" : "90.139.240.83", "socialSecurity" : "896-40-5515", "age" : "33" } }
基本上,模糊查詢的目的是僅找出一個字符的拼寫錯誤,如上所示。若是咱們使用相同的查詢並搜索「 Meal」,則不會返回任何文檔。能夠使用模糊查詢中可用的高級參數進行配置。咱們能夠使用參數,將模糊性設置爲2來實現與如下相同的效果:
POST testindexterms / _search { 「 query」:{ 「 fuzzy」:{ 「 gender」:{ 「 value」:「 Meal」, 「 fuzziness」:「 2」 } } } }
結論在此博客中,咱們看到了一些重要的術語級別查詢,並帶有示例。在下一個博客中,咱們能夠看到全文查詢的另外一部分已被推遲,由於它須要術語級別查詢的一些背景知識。