鬆哥原創的 Spring Boot 視頻教程已經殺青,感興趣的小夥伴戳這裏-->Spring Boot+Vue+微人事視頻教程java
最近一兩週,鬆哥會一直和你們分享 Es 中的搜索、聚合分析等查詢相關的內容。前面咱們簡單說了下搜索入門,今天咱們就來看看 Es 中的全文查詢。web
本文是ElasticSearch 系列第 19 篇,和你們聊一聊索引的基本操做,前 18 篇傳送門:微信
-
打算出一個 ElasticSearch 教程,誰同意,誰反對? -
ElasticSearch 從安裝開始 -
ElasticSearch 第三彈,核心概念介紹 -
ElasticSearch 中的中文分詞器該怎麼玩? -
ElasticSearch 索引基本操做 -
ElasticSearch 文檔的添加、獲取以及更新 -
ElasticSearch 文檔的刪除和批量操做 -
ElasticSearch 文檔路由,你的數據到底存在哪個分片上? -
ElasticSearch 併發的處理方式:鎖和版本控制 -
ElasticSearch 中的倒排索引究竟是什麼? -
ElasticSearch 動態映射與靜態映射 -
ElasticSearch 四種字段類型詳解 -
ElasticSearch 中的地理類型和特殊類型 -
ElasticSearch 23 種映射參數詳解 -
ElasticSearch 如何配置某個字段的權重? -
ElasticSearch 23 種映射參數詳解【3】 -
ElasticSearch 映射模版 -
ElasticSearch 搜索入門
全文查詢:併發
若是你們以爲視頻風格還能接受,也能夠看看鬆哥的付費視頻:Spring Boot+Vue+微人事視頻教程less
如下是視頻筆記:編輯器
注意,筆記只是視頻內容的一個簡要記錄,所以筆記內容比較簡單,完整的內容能夠查看視頻。ide
15.ElasticSearch 全文查詢
15.1 match query
match query 會對查詢語句進行分詞,分詞後,若是查詢語句中的任何一個詞項被匹配,則文檔就會被索引到。flex
GET books/_search
{
"query": {
"match": {
"name": "美術計算機"
}
}
}
這個查詢首先會對 美術計算機
進行分詞,分詞以後,再去查詢,只要文檔中包含一個分詞結果,就回返回文檔。換句話說,默認詞項之間是 OR 的關係,若是想要修改,也能夠改成 AND。url
GET books/_search
{
"query": {
"match": {
"name": {
"query": "美術計算機",
"operator": "and"
}
}
}
}
此時就回要求文檔中必須同時包含 美術 和 計算機 兩個詞。spa
15.2 match_phrase query
match_phrase query 也會對查詢的關鍵字進行分詞,可是它分詞後有兩個特色:
-
分詞後的詞項順序必須和文檔中詞項的順序一致 -
全部的詞都必須出如今文檔中
示例以下:
GET books/_search
{
"query": {
"match_phrase": {
"name": {
"query": "十一五計算機",
"slop": 7
}
}
}
}
query 是查詢的關鍵字,會被分詞器進行分解,分解以後去倒排索引中進行匹配。
slop 是指關鍵字之間的最小距離,可是注意不是關鍵之間間隔的字數。文檔中的字段被分詞器解析以後,解析出來的詞項都包含一個 position 字段表示詞項的位置,查詢短語分詞以後 的 position 之間的間隔要知足 slop 的要求。
15.3 match_phrase_prefix query
這個相似於 match_phrase query,只不過這裏多了一個通配符,match_phrase_prefix 支持最後一個詞項的前綴匹配,可是因爲這種匹配方式效率較低,所以你們做爲了解便可。
GET books/_search
{
"query": {
"match_phrase_prefix": {
"name": "計"
}
}
}
這個查詢過程,會自動進行單詞匹配,會自動查找以計開始的單詞,默認是 50 個,能夠本身控制:
GET books/_search
{
"query": {
"match_phrase_prefix": {
"name": {
"query": "計",
"max_expansions": 3
}
}
}
}
match_phrase_prefix 是針對分片級別的查詢,假設 max_expansions 爲 1,可能返回多個文檔,可是隻有一個詞,這是咱們預期的結果。有的時候實際返回結果和咱們預期結果並不一致,緣由在於這個查詢是分片級別的,不一樣的分片確實只返回了一個詞,可是結果可能來自不一樣的分片,因此最終會看到多個詞。
15.4 multi_match query
match 查詢的升級版,能夠指定多個查詢域:
GET books/_search
{
"query": {
"multi_match": {
"query": "java",
"fields": ["name","info"]
}
}
}
這種查詢方式還能夠指定字段的權重:
GET books/_search
{
"query": {
"multi_match": {
"query": "陽光",
"fields": ["name^4","info"]
}
}
}
這個表示關鍵字出如今 name 中的權重是出如今 info 中權重的 4 倍。
15.5 query_string query
query_string 是一種緊密結合 Lucene 的查詢方式,在一個查詢語句中能夠用到 Lucene 的一些查詢語法:
GET books/_search
{
"query": {
"query_string": {
"default_field": "name",
"query": "(十一五) AND (計算機)"
}
}
}
15.6 simple_query_string
這個是 query_string 的升級,能夠直接使用 +、|、- 代替 AND、OR、NOT 等。
GET books/_search
{
"query": {
"simple_query_string": {
"fields": ["name"],
"query": "(十一五) + (計算機)"
}
}
}
查詢結果和 query_string。
本文分享自微信公衆號 - 江南一點雨(a_javaboy)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。