07.full text query_string查询
文章目錄
- 1. query string簡介
- 2. multi field 多字段查詢
- 3. query string 的語法
- 1. 在query中查詢其他特定的字段
- 2. 通配符
- 3. 正則表達式
- 4. 模糊匹配
- 5. 臨近匹配
- 5. range范圍
1. query string簡介
GET /_search {"query": {"query_string" : {"default_field" : "content","query" : "this AND that OR thus"}} }query_string查詢分析輸入內容并在運算符周圍拆分文本。每個文本部分彼此獨立地進行分析。例如以下查詢:
如果不指定default_field的話,則默認會在(當前index,如果制定了index的話)所有可以查詢的字段中進行查詢
2. multi field 多字段查詢
GET /_search {"query": {"query_string" : {"fields" : ["content", "name"],"query" : "this AND that"}} }等價于
GET /_search {"query": {"query_string": {"query": "(content:this OR name:this) AND (content:that OR name:that)"}} }由于從單個搜索項生成了多個查詢,因此使用dis_max帶有tie_breaker 的查詢自動組合它們。例如(name使用^5符號表示增強5 ):
GET /_search {"query": {"query_string" : {"fields" : ["content", "name^5"],"query" : "this AND that OR thus","tie_breaker" : 0}} }簡單通配符也可用于搜索文檔的特定內部元素“內”。例如,如果我們有一個city包含多個字段(或帶有字段的內部對象)的對象,我們可以自動搜索所有“城市”字段:
GET /_search {"query": {"query_string" : {"fields" : ["city.*"],"query" : "this AND that OR thus"}} }另一種選擇是在查詢字符串本身中提供通配符字段搜索(正確轉義*符號),例如 city.*:something:
GET /_search {"query": {"query_string" : {"query" : "city.\\*:(this AND that OR thus)"}} }由于\(反斜杠)是json字符串中的特殊字符,因此需要對其進行轉義,因此上面的兩個反斜杠query_string
3. query string 的語法
這個有點類似于高級語義了,在kibana的對應的框中能夠使用對應lucene語法,使用的就是query string的語法,也就是query_string對應的query字符串還可以有一些語法來支持更加靈活的查詢。
1. 在query中查詢其他特定的字段
查找status field中包含 active的doc
status:active
查找title中包含quick 或者 brown的doc
title:(quick OR brown)
查找author字段包括短語"john smith" 的doc
author:“John Smith”
如果field name中有空格的話要用反斜杠包裹
first\ name:Alice
比如 book.title, book.content or book.date 這些field 包含 quick 或者 brown (*號要使用反斜杠轉義):
book.*:(quick OR brown)
判斷field存在
exists:title
2. 通配符
通配符搜索可以在單個term上運行,使用?替換單個字符,并*替換零個或多個字符:
qu?ck bro*3. 正則表達式
正則表達式模式可以通過將它們包裝在forward-slashes("/")中嵌入查詢字符串中:
name:/joh?n(ath[oa]n)/4. 模糊匹配
quikc~ brwn~ foks~quikc~1 編輯距離是15. 臨近匹配
proximity searches
"fox quick"~5這個編輯距離和上面的模糊匹配的不一樣,模糊匹配的是針對單個term詞的字符級別的編輯距離,這里的編輯距離是word級別的編輯距離。所以詞出現的順序也可以是不同的。
“quick fox” 會被認為比 “quick brown fox” 更相關。
5. range范圍
date在2012年內
date:[2012-01-01 TO 2012-12-31]
date在2012之前
date:{* TO 2012-01-01}
數字count在1-5中間
count:[1 TO 5]
數字count在10以上
count:[10 TO *]
不包括5
count:[1 TO 5}
還可以使用下面的語法
age:>10 age:>=10 age:<10 age:<=10 age:(>=10 AND <20) age:(+>=10 +<20)總結
以上是生活随笔為你收集整理的07.full text query_string查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 06.full_text multi_m
- 下一篇: 08.join查询