基于詞項term的搜索和基于全文的搜索
ElasticSearch提供了多種搜索方式,包括基于詞項term的搜索和基于全文的搜索。在基于全文的搜索中,查詢串會被分詞,并將分詞后得到的每個詞項在索引中進行搜索。而基于詞項term的搜索則不對查
ElasticSearch提供了多種搜索方式,包括基于詞項term的搜索和基于全文的搜索。在基于全文的搜索中,查詢串會被分詞,并將分詞后得到的每個詞項在索引中進行搜索。而基于詞項term的搜索則不對查詢串進行分詞,直接進行查詢。
創(chuàng)建索引和添加數(shù)據(jù)
首先,我們需要創(chuàng)建一個名稱為books的索引,并批量加入測試文檔數(shù)據(jù)。下面是創(chuàng)建索引和添加數(shù)據(jù)的命令示例:
```
// 刪除索引
DELETE books
// 創(chuàng)建索引并批量添加數(shù)據(jù)
POST /books/_bulk
{ "index": { "_id":1} }
{ "productId" : "Deep Learn Linux", "desc" : "Linux" }
{ "index": { "_id":2} }
{ "productId" : "Java Thought", "desc" : "Java" }
{ "index": { "_id":3} }
{ "productId" : "Netty Actions", "desc" : "Netty" }
```
基于詞項查詢--單個詞項匹配查詢
基于詞項查詢的語法結(jié)構(gòu)為:
```
GET /索引名稱/_search
{
"query": {
"term": {
"字段名稱": {
"value": "字段值"
}
}
}
}
```
如果我們根據(jù)字段desc和值"Linux"進行查詢,會發(fā)現(xiàn)沒有獲取到任何結(jié)果。這是因為在加入索引時,默認(rèn)會進行分詞處理,并將分詞后的所有詞項轉(zhuǎn)化為小寫。因此,通過"Linux"無法查詢到文檔數(shù)據(jù)。如果我們使用"linux"進行查詢,就可以得到相應(yīng)的文檔數(shù)據(jù)。
基于詞項查詢--多個詞項的字符串匹配查詢
由于基于詞項term的查詢不對查詢串進行分詞處理,因此如果查詢串中包含多個詞項,無論如何查詢都不可能匹配到任何文檔數(shù)據(jù)。為了解決這個問題,可以記住多字段屬性來查詢。例如,text類型屬性默認(rèn)有一個keyword字段,我們可以使用該字段進行查詢。
基于詞項查詢--跳過算分查詢
基于詞項的查詢通常用于精確匹配,因此算分?jǐn)?shù)值并不關(guān)鍵。為了提高查詢效率,我們可以使用constant score將算分過程去掉。特別是對于大數(shù)據(jù)量查詢,這種方式可以顯著提高查詢效率。
以上就是基于詞項term的搜索和基于全文的搜索的相關(guān)知識。通過合理運用不同的搜索方式,可以更加靈活地滿足各種搜索需求。