Elasticsearch 的查詢操作
由於DSL查詢更為直觀也更為簡易,所以大都使用這種方式。
DSL查詢是POST過去一個json,由於post的請求是json格式的,所以存在很多靈活性,也有很多形式。
這裡有一個地方注意的是官方文件裡面給的例子的json結構只是一部分,並不是可以直接黏貼複製進去使用的。一般要在外面加個query為key的機構。
match
最簡單的一個match例子:
查詢和"我的寶馬多少馬力"這個查詢語句匹配的文件。
{
"query":
{ "match":
{ "content"
: { "
上面的查詢匹配就會進行分詞,比如"寶馬多少馬力"會被分詞為"寶馬
多少 馬力", 所有有關"寶馬 多少 馬力", 那麼所有包含這三個詞中的一個或多個的文件就會被搜尋出來。
並且根據lucene的評分機制(TF/IDF)來進行評分。
match_phrase
比如上面一個例子,一個文件"我的保時捷馬力不錯"也會被搜尋出來,那麼想要精確匹配所有同時包含"寶馬 多少 馬力"的文件怎麼做?就要使用 match_phrase 了
{ "query": { "match_phrase": { "content" : { "query" :完全匹配可能比較嚴,我們會希望有個可調節因子,少匹配一個也滿足,那就需要使用到slop。
{
"query":
{ "match_phrase":
{ "content"
: { "query"
: "我的寶馬多少馬力",
"slop"
: 1
} } }}
multi_match
如果我們希望兩個欄位進行匹配,其中一個欄位有這個文件就滿足的話,使用multi_match
{ "query": { "multi_match": { "query" : "我的寶馬多少馬力", "fields" : ["title","content"但是multi_match就涉及到匹配評分的問題了。
{
"query":
{ "multi_match":
{ "query":"我的寶馬發動機多少",
"type":"best_fields",
"fields":
[ "tag","content"
], "tie_breaker":0.3
} }}
意思就是完全匹配"寶馬
發動機"的文件評分會比較靠前,如果只匹配寶馬的文件評分乘以0.3的係數
我們希望越多欄位匹配的文件評分越高,就要使用most_fields
{ "query": { "multi_match": { "query":"我的寶馬發動機多少", "type":"most_fields", "fields": [ "tag","content" ] } }}我們會希望這個詞條的分詞詞彙是分配到不同欄位中的,那麼就使用cross_fields
{
"query":
{ "multi_match":
{ "query":"我的寶馬發動機多少",
"type":"cross_fields",
"fields":
[ "tag","content"
] } }}
-------------------------------------------------------------------------------------------------------------------
term是代表完全匹配,即不進行分詞器分析,文件中必須包含整個搜尋的詞彙
{
"query":
{ "term":
{ "content":"汽車保養"
} }}
查出的所有文件都包含"汽車保養"這個片語的詞彙。
使用term要確定的是這個欄位是否“被分析”(analyzed),預設的字串是被分析的。
拿官網上的例子舉例:
mapping是這樣的:
PUT my_index{"mappings": { "my_type": { "properties": { "full_text": { "type":"string" }, "exact_value": { "type":"string","index":"not_analyzed" } } } }}PUT
my_index/my_type/1{"full_text":"Quick
Foxes!","exact_value":"Quick
Foxes!" }
其中的full_text是被分析過的,所以full_text的索引中存的就是[quick, foxes],而extra_value中存的是[Quick Foxes!]。
那下面的幾個請求:
GET my_index/my_type/_search{"query": { "term": { "exact_value":"Quick Foxes!" } }} 請求的出資料,因為完全匹配GET
my_index/my_type/_search{"query":
{ "term":
{ "full_text":"Quick
Foxes!" } }}
請求不出資料的,因為full_text分詞後的結果中沒有[Quick Foxes!]這個分詞。
bool聯合查詢: must,should,must_not
如果我們想要請求"content中帶寶馬,但是tag中不帶寶馬"這樣類似的需求,就需要用到bool聯合查詢。
聯合查詢就會使用到must,should,must_not三種關鍵詞。
這三個可以這麼理解
- must: 文件必須完全匹配條件
- should: should下面會帶一個以上的條件,至少滿足一個條件,這個文件就符合should
- must_not: 文件必須不匹配條件
比如上面那個需求:
{ "query": { "bool": { "must": { "term": { "content":"寶馬" } }, "must_not": { "term": { "tags":"寶馬" } } } }}相關推薦
Elasticsearch Essentials——Elasticsearch查詢操作
Query string 查詢可以將需要查詢的條件組裝在一起形成字串,來進行復雜的資料查詢。例如GET /oa/employee/_search?q=gender:male&sort=age:desc,這串查詢的結果就是以age為降序排序的所有的male
elasticsearch基本操作之--使用QueryBuilders進行查詢
constant false cor ble conn 中一 listen terms int /** * 系統環境: vm12 下的centos 7.2 * 當前安裝版本: elasticsearch-2.4.0.tar.gz */ QueryBuilder 是es
ElasticSearch常用操作:查詢與聚合篇
使用 目的 復雜 但是 應用 條件 說明 exist 5.4 [TOC] 0 說明 基於es 5.4和es 5.6,列舉的是個人工作中經常用到的查詢(只是工作中使用的是Java API),如果需要看完整的,可以參考官方相關文檔https://www.elastic.co/
elasticsearch(二)java 使用同步步方法進行查詢操作
一、 基本步驟: 1)建立連線物件: RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(
Elasticsearch中的兩種查詢操作query和filter
ES中的查詢操作分為2種:查詢(query)和過濾(filter)。 查詢即是之前提到的query查詢,它(查詢)預設會計算每個返回文件的得分,然後根據得分排序。 而過濾(filter)只會篩選出符合的文件,並不計算得分,且它可以快取文件。所以,單從效能考慮,過濾比查詢更快
Elasticsearch 的查詢操作
es中的查詢請求有兩種方式,一種是簡易版的查詢,另外一種是使用JSON完整的請求體,叫做結構化查詢(DSL)。由於DSL查詢更為直觀也更為簡易,所以大都使用這種方式。DSL查詢是POST過去一個json,由於post的請求是json格式的,所以存在很多靈活性,也有很多形式。
elasticsearch-查詢基礎篇
cor 結構 one and string 以及 sco 高級 posit elasticsearch的查詢有兩部分組成:query and filter。 兩者的主要區別在於:filter是不計算相關性的,同時可以cache。因此,filter速度要快於query。 先
ThinkPHP5.0 模型查詢操作
asc div code all 個數 關聯 開啟 val user 1、獲取單個數據 //取出主鍵為1的數據 $user = User::get(1); echo $user->name; // 使用數組查詢 $user = User::get([‘name‘
06-查詢操作(DQL)
過濾 函數 外鍵約束 分頁查詢 外鍵 內連接 單表 soft 兩個 一. 綜述 查詢操作主要從兩個方面來說:單表查詢和多表查詢。 單表查詢包括:簡單查詢、過濾查詢、結果查詢、分頁查詢、聚集函數;多表查詢包括:笛卡爾積、外鍵約束、內連接查詢、外鏈接查詢、自連接查詢。 二
elasticsearch常用操作
response spa pda 插件 cat 滾動 max 常用 post 3.3.1 Preparing a query 準備查詢請求 import org.elasticsearch.action.search.SearchResponse; import or
ElasticSearch 查詢
elasticsearch查詢刪除更多關於查詢:http://blog.csdn.net/laoyang360/article/details/51931981 http://www.cnblogs.com/xing901022/category/642865.htmlElasticSearch 查詢
MYSQL中的多類型查詢及高級查詢操作
最大值 -s 當前 and 最大 笛卡爾 rand 必須 min 離散查詢select * from car where price=30 or price=40 or price=50 or price=60;select * from car where price
ELK 學習筆記之 elasticsearch Mget操作
get arch curl idt under alt ima .cn blog Mget操作: 查詢多個文檔: curl -XGET ‘http://192.168.1.151:9200/_mget‘ -d ‘{"docs": [{"_index": "library
elasticsearch更新操作java
nts earch email ear java art cut bsp ace /** * 更新操作,更新某個_id下的field的值 * @throws IOException */public static void UpdateDoc() throws IOExce
django---查詢操作
com 列表 blog 但是 開頭 查找 get 多個 去重 1)queryset對象: 表示的是一個列表裏面有多個類對象的集合,, all()方法和filter()方法,查找出來的都是queryset方法 2)model對象:只有一個對象 get()方法查找出來的
Elasticsearch-基本操作1
index true 結果 大寫 block 自動生成 超時 delet 類型 Elasticsearch版本:6.0一、文檔一個文檔不僅包含數據,也包含元數據,三個必須的元數據如下_index:具有共同特性分到一起的文檔集合,標示了文檔的存放位置; 名字小寫,不以下
數據庫查詢操作(fetchone,fetchall)
一個 而在 mysql 沒有 備註 sele one 訪問 使用 數據庫查詢操作 Python查詢Mysql使用 fetchone() 方法獲取單條數據, 使用fetchall() 方法獲取多條數據。 fetchone(): 該方法獲取下一個查詢結果集
mongodb查詢操作分析
stats rec dex mes sub n) 方法 3.1 and 背景 mongodb 提供了類sql的數據查詢及操作方式,同時也包含了聚合操作、索引等多個機制; 按以往的經驗,不當的庫表操作或索引模式往往會造成許多問題,如查詢操作緩慢、數據庫吞吐量低下、CPU或磁盤
簡單的數據庫查詢操作
出現 mil course body 函數 not 排序 where子句 目標 格式: select <目標列名序列> ---需要哪些列from <表名> ---來自於哪些表where <行選擇條件> ---根據
Elasticsearch教程 Elasticsearch查詢語法 Elasticsearch權威指南 深入理解Elasticsearch
廣度 int ldd 流量 讀寫性能 word har 優先 廣度優先 課程大綱 第1節結構化搜索_IT技術論壇案例背景介紹 9分鐘 第2節結構化搜索_在案例中實戰使用term filter來搜索數據 20分鐘 第3節結構化搜索_filter執行原理深度剖析(bitset機