問題:
在使用term精確查詢text 類型時,比如phone 手機號數(shù)值時可以查詢到,使用nickname 這種text 查詢不到。
我的mapping 是這樣的
?
?
解決:
1.通過es提供的測試分詞的接口,我們可以測試各字段的分詞情況
get http:/ip/索引名稱/_analyze
{
"field":"firtname", #要進行分析的索引中的字段
"text":"DNF" #要進行分析的文本內(nèi)容
}
分別分詞為’北‘,京,大,學,并沒有我想要的整體的一塊的分詞 “北京大學”。
2.ES 字段類型keyword和text的區(qū)別和選擇
keyword:存儲數(shù)據(jù)時候,不會分詞建立索引
text:存儲數(shù)據(jù)時候,會自動分詞,并生成索引
創(chuàng)建es索引是最好先設置好每個字段的類型和使用的分詞索引,如果不需要分詞查詢,設置字段類型為keyword最好,例如商品id、編號之類的;
如果需要分詞查詢,就設置為text類型,并且指定分詞器,例如商品名稱、商品標簽、關鍵字等等;
設置字段類型和使用的分詞器:
"fieldName": {
? ?"type": "text", #字段類型為text
? ?"analyzer":"ik_max_word" #ik中文分詞器
}
注意:設置字段類型為text后,es建立的分詞索引會把大寫字母轉換為小寫,通過term精確匹配就匹配不到
結果:
后面我試著為content添加附屬字段keyword,希望能夠借此達到目的:
$where = [
/*"term" => [ //根據(jù)詞條精確值查詢
"_id" => ["value" => "42"]
]*/
/*"range" => [
"birthday" => [
"gte" => '1989-03-31', // 這里的gte代表大于等于,gt則代表大于
"lte" => '2095-03-31' // lte代表小于等于,lt則代表小于
]
]*/
/*"match" => [ //單字段查詢
"nickname" => "藍紅白"
],*/
'bool' => [
'should' => [
// ["term" => ["_id" => '42']], //可以查詢到
// ["term" => ["id" => '7']],//可以查詢到
// ["term" => ["phone" => '18235555501']],//可以查詢到
// ["term" => ["school_name" => '北京大學']],// 查不到
["term" => ["school_name.keyword" => '北京大']],//可以查詢到
["term" => ["nickname.keyword" => '小白']],//可以查詢到
]
]
];
?["term" => ["school_name.keyword" => '北京大']], 必須為“北京大學”,多一字少一字都匹配不到這就是精確匹配。文章來源:http://www.zghlxwxcb.cn/news/detail-410784.html
總結:
- 布爾查詢: must:必須匹配每個子查詢,類似“與”; ?should:選擇性匹配子查詢,類似“或”; ?must_not:必須不匹配,不參與算分,類似“非”; ?filter:必須匹配,不參與算分
- ?bool.must:適用于精確查詢,并且如果使用多個term的話不能適用于同一個字段,多值而適用于多個字段
- match:根據(jù)一個字段查詢,在匹配時會對所查找的關鍵詞進行分詞,然后按分詞匹配查找,而term會直接對關鍵詞進行查找。一般模糊查找的時候,多用match,而精確查找時可以使用term。
- multi_match: 提供在多個字段上查詢,搜索字段越多,對查詢性能影響越大,因此建議采用copy_to,然后單字段查詢的方式
- erm結合bool使用時:should是或,must是與,must_not是非
- term:精準查詢,根據(jù)詞條精確值查詢,keyword、數(shù)值類型、布爾類型、日期類型字段; range:根據(jù)值的范圍查詢,可以是數(shù)值、日期的范圍
- geo_bounding_box:矩形范圍查詢,查詢坐標落在某個矩形范圍的所有文檔,查詢時,需要指定矩形的左上、右下兩個點的坐標,然后畫出一個矩形,落在該矩形內(nèi)的都是符合條件的點。
- geo_distance:附近查詢,也叫做距離查詢,查詢到指定中心點小于某個距離值的所有文檔。在地圖上找一個點作為圓心,以指定距離為半徑,畫一個圓,落在圓內(nèi)的坐標都算符合條件
?https://blog.csdn.net/xcdsdf14545/article/details/106189972/
https://blog.csdn.net/Muscleheng/article/details/115380374文章來源地址http://www.zghlxwxcb.cn/news/detail-410784.html
到了這里,關于es8 text類型使用term精確查詢失效的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!