字段类型分 keyword (不分词) 和 text (分词)
字段值为 "quick brown fox", 详细的create index 和 insert data 语句在后边
注意:keyword类型字段不分词,text类型字段
keyword类型的字段值就是 "quick brown fox",不分词,必须当成一个整体
text类型的字段值是 "quick brown fox",分词,可以当成一个有序list ["quick", "brown", "fox"]
按照字段值类型来分:
一、keyword类型字段值不分词,term, match, match_phrase查询语句必须与字段值完全匹配
例如查询语句必须是 ["quick brown fox"] 才能查出来,["quick", "brown", "fox"]中的任何一个值都不行。
二、text字段值分词
1. term查询语句不分词,因此查询语句必须是text字段分词之后的某一个才行。
例如查询语句必须是 ["quick", "brown", "fox"] 中的某一个才行。而["quick brown", "quick brown fox", "quick " ] 中的任务一个不行,包括 "quick brown fox" 和 "quick "(因为有个空格,term不对对查询语句分词,其值包含空格,而数据分词后不带空格,导致不匹配)
2. match查询语句分词, 因此查询语句分词后和字段值分词后的结果的交集不为空,就可以查询出来。
例如查询语句 ["quick", "brown", "fox", "quick ", "quick brown fox", "a brown b", "fox quick"] 中的任何一个都行。
3. match_phrase查询语句分词,加上顺序原因,因此查询语句必须是index字段值的一部分才行。类似于python中的list,必须是其中的一个连续切片就行。也可以理解为字符串的字串,但是单词不能截断。
例如查询语句 ["quick", "brown", "fox", "quick ", "quick brown fox", " brown fox"] 中的任何一个都行。
但是, ["fox quick", "quick brown f", "quick fox"]不行。fox quick是因为顺序不同,也就是不是其中的字串; "quick fox"不行因为中间漏了一个单词,也就是不是字段值的子串;"quick brown f"不行是因为单词被截断了。
4. match_phrase_prefix 查询语句分词,和match_phrase类似,和 match_phrase_prefix 的区别是可以理解为字符串的子串,但是单词可以截断。
例如查询语句 ["quick", "brown", "fox", "quick ", "quick brown fox", " brown fox", "quick brown fo", "quick brown fo*"] 都能查出来,
对于中文来说,因为每个中文字均不能分割,所以和match_phrase_prefix没有任何区别
对于英文来说,单词可以分割为字母,和match_phrase_prefix有区别
例如:match_phrase查询值为"quick brown fo"查不出来,而match_phrase_prefix查询值为"quick brown fo"则能查出来
delete /query_example PUT /query_example { "settings": { "number_of_shards": 5, "number_of_replicas": 1 }, "mappings": { "properties": { "id": { "type": "keyword" }, "keyword_value": { "type": "keyword" }, "text_value": { "type": "text" } } } } } POST /query_example/_doc/ { "id": 1, "keyword_value": "quick brown fox", "text_value": "quick brown fox" } GET query_example/_search { "query": { "term": { "keyword_value": "quick" /* 返回0行 */ } } } GET query_example/_search { "query": { "match_phrase_prefix": { "keyword_value": "quick" /* failed to create query: Can only use phrase prefix queries on text fields - not on [keyword_value] which is of type [keyword] */ } } }
标签:brown,Search,fox,quick,phrase,分词,match From: https://www.cnblogs.com/panda4671/p/18129326