- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- 使用ElasticSearch 怎么實(shí)現全文搜索
使用ElasticSearch 怎么實(shí)現全文搜索,相信很多沒(méi)有經(jīng)驗的人對此束手無(wú)策,為此本文總結了問(wèn)題出現的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
match query 會(huì )對查詢(xún)語(yǔ)句進(jìn)行分詞,分詞后,如果查詢(xún)語(yǔ)句中的任何一個(gè)詞項被匹配,則文檔就會(huì )被索引到。
GET books/_search
{
"query": {
"match": {
"name": "美術(shù)計算機"
}
}
}
這個(gè)查詢(xún)首先會(huì )對 美術(shù)計算機
進(jìn)行分詞,分詞之后,再去查詢(xún),只要文檔中包含一個(gè)分詞結果,就回返回文檔。換句話(huà)說(shuō),默認詞項之間是 OR 的關(guān)系,如果想要修改,也可以改為 AND。
GET books/_search
{
"query": {
"match": {
"name": {
"query": "美術(shù)計算機",
"operator": "and"
}
}
}
}
此時(shí)就回要求文檔中必須同時(shí)包含 美術(shù) 和 計算機 兩個(gè)詞。
match_phrase query 也會(huì )對查詢(xún)的關(guān)鍵字進(jìn)行分詞,但是它分詞后有兩個(gè)特點(diǎn):
示例如下:
GET books/_search
{
"query": {
"match_phrase": {
"name": {
"query": "十一五計算機",
"slop": 7
}
}
}
}
query 是查詢(xún)的關(guān)鍵字,會(huì )被分詞器進(jìn)行分解,分解之后去倒排索引中進(jìn)行匹配。
slop 是指關(guān)鍵字之間的最小距離,但是注意不是關(guān)鍵之間間隔的字數。文檔中的字段被分詞器解析之后,解析出來(lái)的詞項都包含一個(gè) position 字段表示詞項的位置,查詢(xún)短語(yǔ)分詞之后 的 position 之間的間隔要滿(mǎn)足 slop 的要求。
這個(gè)類(lèi)似于 match_phrase query,只不過(guò)這里多了一個(gè)通配符,match_phrase_prefix 支持最后一個(gè)詞項的前綴匹配,但是由于這種匹配方式效率較低,因此大家作為了解即可。
GET books/_search
{
"query": {
"match_phrase_prefix": {
"name": "計"
}
}
}
這個(gè)查詢(xún)過(guò)程,會(huì )自動(dòng)進(jìn)行單詞匹配,會(huì )自動(dòng)查找以計開(kāi)始的單詞,默認是 50 個(gè),可以自己控制:
GET books/_search
{
"query": {
"match_phrase_prefix": {
"name": {
"query": "計",
"max_expansions": 3
}
}
}
}
match_phrase_prefix 是針對分片級別的查詢(xún),假設 max_expansions 為 1,可能返回多個(gè)文檔,但是只有一個(gè)詞,這是我們預期的結果。有的時(shí)候實(shí)際返回結果和我們預期結果并不一致,原因在于這個(gè)查詢(xún)是分片級別的,不同的分片確實(shí)只返回了一個(gè)詞,但是結果可能來(lái)自不同的分片,所以最終會(huì )看到多個(gè)詞。
match 查詢(xún)的升級版,可以指定多個(gè)查詢(xún)域:
GET books/_search
{
"query": {
"multi_match": {
"query": "java",
"fields": ["name","info"]
}
}
}
這種查詢(xún)方式還可以指定字段的權重:
GET books/_search
{
"query": {
"multi_match": {
"query": "陽(yáng)光",
"fields": ["name^4","info"]
}
}
}
這個(gè)表示關(guān)鍵字出現在 name 中的權重是出現在 info 中權重的 4 倍。
query_string 是一種緊密結合 Lucene 的查詢(xún)方式,在一個(gè)查詢(xún)語(yǔ)句中可以用到 Lucene 的一些查詢(xún)語(yǔ)法:
GET books/_search
{
"query": {
"query_string": {
"default_field": "name",
"query": "(十一五) AND (計算機)"
}
}
}
這個(gè)是 query_string 的升級,可以直接使用 +、|、- 代替 AND、OR、NOT 等。
GET books/_search
{
"query": {
"simple_query_string": {
"fields": ["name"],
"query": "(十一五) + (計算機)"
}
}
}
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站