1、ik_max_word
會將文字做最細粒度的拆分,比如會將「中華人民共和國人民大會堂」拆分為「中華人民共和國、中華人民、中華、華人、人民共和國、人民、共和國、大會堂、大會、會堂等詞語。
2、ik_smart
會做最粗粒度的拆分,比如會將「中華人民共和國人民大會堂」拆分為中華人民共和國、人民大會堂。
在實際的專案查詢中,term
和match
是最常用的兩個查詢,而經常搞不清兩者有什麼區別,趁機總結有空總結下。
term
用法
先看看term的定義,term是代表完全匹配,也就是精確查詢,搜尋前不會再對搜尋詞進行分詞拆解。
這裡通過例子來說明,先存放一些資料:
來使用term
查詢下:
}}
結果是,上面的兩條資料都能查詢到:
,
"hits": },}
]}}
發現,title裡有關love的關鍵字都查出來了,但是我只想精確匹配love china
這個,按照下面的寫法看看能不能查出來:
}}
執行發現無資料,從概念上看,term屬於精確匹配,只能查單個詞。我想用term匹配多個詞怎麼做?可以使用terms
來:
}}
查詢結果為:
,
"hits": },}
]}}
發現全部查詢出來,為什麼?因為terms裡的[ ]
多個是或者的關係,只要滿足其中乙個詞就可以。想要通知滿足兩個詞的話,就得使用bool的must來做,如下:
},}
]}
}}
可以看到,我們上面使用china
是小寫的。當使用的是大寫的china
我們進行搜尋的時候,發現搜不到任何資訊。這是為什麼了?title這個詞在進行儲存的時候,進行了分詞處理。我們這裡使用的是預設的分詞處理器進行了分詞處理。我們可以看看如何進行分詞處理的?
分詞處理器
get test/_analyze
結果為:
,
]}
分析出來的為love
和china
的兩個詞。而term
只能完完整整的匹配上面的詞,不做任何改變的匹配。所以,我們使用china
這樣的方式進行的查詢的時候,就會失敗。稍後會有一節專門講解分詞器。
match
用法
先用love china
來匹配。
get test/doc/_search
}}
結果是:
,
"hits": },}
]}}
發現兩個都查出來了,為什麼?因為match進行搜尋的時候,會先進行分詞拆分,拆完後,再來匹配,上面兩個內容,他們title的詞條為:love china hubei
,我們搜尋的為love china
我們進行分詞處理得到為love china
,並且屬於或的關係,只要任何乙個詞條在裡面就能匹配到。如果想love
和china
同時匹配到的話,怎麼做?使用match_phrase
match_phrase
用法
match_phrase
稱為短語搜尋,要求所有的分詞必須同時出現在文件中,同時位置必須緊鄰一致。
get test/doc/_search
}}
結果為:
,
"hits": }]
}}
這次好像符合我們的需求了,結果只出現了一條記錄。
bool查詢對應lucene中的booleanquery,它由乙個或者多個子句組成,每個子句都有特定的型別。
bool查詢也支援禁用協同計分選項disable_coord。一般計算分值的因素取決於所有的查詢條件。
bool查詢也是採用more_matches_is_better的機制,因此滿足must和should子句的文件將會合併起來計算分值。
},"filter":
},"must_not" : }},
"should" : [},}
],"minimum_should_match" : 1,
"boost" : 1.0
}}
在filter子句查詢中,分值將會都返回0。分值會受特定的查詢影響。
比如,下面三個查詢中都是返回所有status欄位為active的文件
第乙個查詢,所有的文件都會返回0:
get _search}}
}}
下面的bool查詢中包含了乙個match_all,因此所有的文件都會返回1
get _search
},"filter": }}
}}
constant_score與上面的查詢結果相同,也會給每個文件返回1:
get _search}}
}}
如果想知道到底是bool裡面哪個條件匹配,可以使用named query查詢:
}},
}}],
"filter" : }}
}
es中的term和match的區別
term hits love china terms hits 可以看到,我們上面使用china是小寫的。當使用的是大寫的china我們進行搜尋的時候,發現搜不到任何資訊。這是為什麼了?title這個詞在進行儲存的時候,進行了分詞處理。我們這裡使用的是預設的分詞處理器進行了分詞處理。我們可以看看如何...
es搜尋核心與實戰 Day02
倒排索引包含兩個部分 單詞詞典一般比較大,可以通過b 樹或雜湊拉鍊法實現,以滿足高效能的插入與查詢 get analyze 1.standard analyzer 2.analyzer 3.whitespace analyzer 4.stop analyzer 5.keyword analyzer ...
es搜尋核心與實戰Day05
1.詞頻tf term frequency 檢索詞在子篇文件 現的頻率 檢索詞出現的次數除以文件的總字數 度量一條查詢和結果文件相關性的簡單方法 簡單將搜尋中每一乙個詞的tf進行相力 tf 區塊鏈 tf 的 tf 應用 stop word 的 在文件 現了很多次,但是對貢獻相關度幾乎沒有用處,不應該...