es match和term的區別
阿新 • • 發佈:2018-12-30
條件 doc cts pre electric arch ping 直接 cluster
(一)text字段和keyword字段的區別
以下給出一個例子:
首先建立一個索引和類型,引入一個keywork的字段:
PUT my_index { "mappings": { "products": { "properties": { "name": { "type": "keyword" } } } } }
然後查詢是否有索引:
GET _cluster/state
可以看到已經創建成功:
添加一條數據:
POST my_index/products { "name":"washing machin" }
然後查詢:
GET my_index/products/_search { "query": { "term": { "name": "washing" } } }
可以看到沒有匹配到任何數據:
然後查詢:
GET my_index/products/_search { "query": { "term": { "name": "washing machine" } } }
可以看到成功匹配到了數據:
所以將字段設置成keyword的時候查詢的時候已有的值不會被分詞。
現在添加一個text類型的字段:
PUT my_index/_mapping/products?update_all_types {"properties": { "tag": { "type": "text" } } }
可以看到添加成功:
往之前已經創建的doc之中添加tag的數據:
POST my_index/products/AWf9f66WV8yLH435XhgI { "name":"washing machine", "tag":"electric household" }
查詢一下,可以看到:
然後對tag字段進行查詢:
POST /my_index/products/_search { "query": { "term": {"tag": "household" } } }
可以看到雖然沒有全部輸入,但是已經查詢到了:
現在輸入全部的查詢:
POST /my_index/products/_search { "query": { "term": { "tag": "electric household" } } }
發現現在已經查詢不到了:
說明text類型的字段會被分詞,查詢的時候如果用拆開查可以查詢的到,但是要是直接全部查,就是查詢不到。
(二)match和term的區別
term是對查詢條件裏的詞不做分詞。
match是對查詢條件裏的詞做分詞,然後目標有包含即可其中一個即可。
match_phrase是對查詢條件裏的詞做分詞,然後必須包含所有的詞。
es match和term的區別