我们在使用Elasticsearch进行搜索的时候,会需要对搜索结果进行调整,以达到最佳效果。影响搜索结果的取决于索引和搜索分词的匹配度,低精度要求可以是只要一个搜索分词命中就算匹配到了,高精度要求可以是每一个搜索分词都命中才算匹配到了,甚至可以要求索引必须一字不差地包含搜索关键字才算匹配到了。
福哥今天带着大家来了解一下ES的匹配模式的知识吧。我们今天只谈匹配问题,不讲排序问题,所以童鞋们可以不用考虑搜索结果记录之间的匹配度高低问题了。
这种方式就是根据默认规则进行匹配,并根据默认权重进行排序的
{
"from": 0,
"size": 10,
"query": {
"bool": {
"must": {
"match": {
"userName": "福哥"
}
}
}
}
}设置最小匹配度为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%"
}
}
}
}
}
}这种方式就是需要查询字符串完全在目标字符串当中才行,类似SQL的(like '%福哥%')意思
{
"from": 0,
"size": 10,
"query": {
"bool": {
"must": {
"match_pharse": {
"userName": "福哥"
}
}
}
}
}福哥整理了一些关于使用Elasticsearch的搜索技巧,后面福哥会不断精进关于ES的搜索技巧的内容,大家可以持续关注“同福编程”。