1. text字段和keyword字段的區(qū)別
以下給出一個(gè)例子:
首先建立一個(gè)索引和類型受葛,引入一個(gè)keywork的字段:
PUT my_index
{ "mappings": {
"products": {
"properties": {
"name": {
"type": "keyword"
}
}
}
}
}
然后查詢是否有索引:
GET _cluster/state
可以看到已經(jīng)創(chuàng)建成功:
添加一條數(shù)據(jù):
POST my_index/products
{ "name":"washing machin" }
然后查詢:
{ "query": { "term": { "name": "washing" }
}
}
可以看到?jīng)]有匹配到任何數(shù)據(jù):
然后查詢:
GET my_index/products/_search
{ "query": { "term": { "name": "washing machine" }
}
}
可以看到成功匹配到了數(shù)據(jù):
所以將字段設(shè)置成keyword的時(shí)候查詢的時(shí)候已有的值不會(huì)被分詞题涨。
現(xiàn)在添加一個(gè)text類型的字段:
PUT my_index/_mapping/products?update_all_types
{ "properties": { "tag": { "type": "text" }
}
}
可以看到添加成功:
往之前已經(jīng)創(chuàng)建的doc之中添加tag的數(shù)據(jù):
POST my_index/products/AWf9f66WV8yLH435XhgI
{ "name":"washing machine", "tag":"electric household" }
查詢一下,可以看到:
然后對(duì)tag字段進(jìn)行查詢:
POST /my_index/products/_search
{ "query": { "term": { "tag": "household" }
}
}
可以看到雖然沒有全部輸入总滩,但是已經(jīng)查詢到了:
現(xiàn)在輸入全部的查詢:
POST /my_index/products/_search
{ "query": { "term": { "tag": "electric household" }
}
}
發(fā)現(xiàn)現(xiàn)在已經(jīng)查詢不到了:
說(shuō)明text類型的字段會(huì)被分詞纲堵,查詢的時(shí)候如果用拆開查可以查詢的到,但是要是直接全部查闰渔,就是查詢不到席函。
注意“1, 2”會(huì)被拆分成[1, 2],但是"1,2"是不拆分的冈涧,少了個(gè)空格茂附。
2. match和term的區(qū)別
1.term
- term查詢keyword字段。
term不會(huì)分詞督弓。而keyword字段也不分詞营曼。需要完全匹配才可。
成功愚隧。
但是如果:
則查詢失敗蒂阱。
- term查詢text字段。
因?yàn)閠ext字段會(huì)分詞狂塘,而term不分詞蒜危,所以term查詢的條件必須是text字段分詞后的某一個(gè)。
查詢成功睹耐。
查詢失敗辐赞,因?yàn)楝F(xiàn)在tag已經(jīng)被分詞了,存儲(chǔ)的是[he, is, silly, man]硝训。
這樣查詢:
也是失敗了响委,道理跟上面的是一樣的新思。
2.match
- match查詢keyword字段
match會(huì)被分詞,而keyword不會(huì)被分詞赘风,match的需要跟keyword的完全匹配可以夹囚。
其他的不完全匹配的都是失敗的。
- match查詢text字段
match分詞邀窃,text也分詞荸哟,只要match的分詞結(jié)果和text的分詞結(jié)果有相同的就匹配。
成功瞬捕。如果都不相同就失敗了鞍历。
3. match_phrase
- match_phrase匹配keyword字段。
這個(gè)同上必須跟keywork一致才可以肪虎。
只有這種情況才是成功的劣砍。
- match_phrase匹配text字段。
match_phrase是分詞的扇救,text也是分詞的刑枝。match_phrase的分詞結(jié)果必須在text字段分詞中都包含,而且順序必須相同迅腔,而且必須都是連續(xù)的装畅。
這是成功的。
如果不是連續(xù)的沧烈,就會(huì)失敗洁灵。
4.query_string
- query_string查詢key類型的字段,試過(guò)了掺出,無(wú)法查詢徽千。
失敗的,無(wú)法查詢汤锨。
- query_string查詢text類型的字段双抽。
和match_phrase區(qū)別的是,不需要連續(xù)闲礼,順序還可以調(diào)換牍汹。
成功。