最近使用了es的match和match_phrase,简单的做了一个对比
首先看看 ”我好帅“ 怎么进行分词?并将 我好帅 存入es
GET _analyze
{
"analyzer": "ik_max_word",
"text": "我好帅"
}
{
"tokens": [
{
"token": "我好",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
},
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_WORD",
"position": 1
},
{
"token": "好",
"start_offset": 1,
"end_offset": 2,
"type": "CN_WORD",
"position": 2
},
{
"token": "帅",
"start_offset": 2,
"end_offset": 3,
"type": "CN_WORD",
"position": 3
}
]
}
现在搜索 我好 ,会被分词为 我好 、我、好 三个分词,则都在分词库匹配上了。
match:只要匹配上任何一个分词,则返回
match_phrase:必须全部匹配,还要索引位置相邻
例如 现在搜 我帅,我 和 帅 都匹配上了,但是索引位置不相邻,所以不会返回数据
GET /kehujbxx_index_v1/kehujbxx_info/_search
{
"query": {
"bool": {
"should": [
{
"match_phrase": {
"xingming": {
"query": "我帅",
"analyzer":"ik_max_word"
}
}
}
]
}
}
}