介绍
介绍
我们在使用Elasticsearch进行搜索的时候,会需要对搜索结果进行调整,以达到最佳效果。影响搜索结果的取决于索引和搜索分词的匹配度,低精度要求可以是只要一个搜索分词命中就算匹配到了,高精度要求可以是每一个搜索分词都命中才算匹配到了,甚至可以要求索引必须一字不差地包含搜索关键字才算匹配到了。
福哥今天带着大家来了解一下ES的匹配模式的知识吧。我们今天只谈匹配问题,不讲排序问题,所以童鞋们可以不用考虑搜索结果记录之间的匹配度高低问题了。
match(全文匹配)
这种方式就是根据默认规则进行匹配,并根据默认权重进行排序的
{ "from": 0, "size": 10, "query": { "bool": { "must": { "match": { "userName": "福哥" } } } } }
minimum_should_match(匹配度)
分词个数匹配度
设置最小匹配度为1,表示只要有一个分词命中就匹配出来
如果匹配度数字设置过大,会出现大量查询不到结果的情况
{ "from": 0, "size": 10, "query": { "bool": { "must": { "match": { "userName": { "query":"福哥", "minimum_should_match": 1 } } } } } }
百分比匹配度
设置最小匹配度为50%,表示只要有一半的分词命中就匹配出来
如果匹配百分比设置接近100%,会出现大量查询不到结果的情况
{ "from": 0, "size": 10, "query": { "bool": { "must": { "match": { "userName": { "query":"福哥", "minimum_should_match": "50%" } } } } } }
组合匹配度
设置组合匹配度3<80%,这个有点复杂,分两种情况
如果不高于下限(3)则下限(3)和上限(80%)都要判断
如果高于下限(3)则只有上限(80%)会被判断
{ "from": 0, "size": 10, "query": { "bool": { "must": { "match": { "userName": { "query":"福哥", "minimum_should_match": "3<80%" } } } } } }
match_phrase(精确匹配)
这种方式就是需要查询字符串完全在目标字符串当中才行,类似SQL的(like '%福哥%')意思
{ "from": 0, "size": 10, "query": { "bool": { "must": { "match_pharse": { "userName": "福哥" } } } } }
总结
福哥整理了一些关于使用Elasticsearch的搜索技巧,后面福哥会不断精进关于ES的搜索技巧的内容,大家可以持续关注“同福编程”。