本文主要是介绍Elasticsearch语法知多少之Match phrase query,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
目标
ES版本信息
官方文档
短语查询的作用
实战
创建索引和文档
基本语法
易错点解析
设置slop解决分词间隔数量
目标
掌握es短语查询语法,通过设置slop参数控制短语搜索允许的分词间隔数量。
ES版本信息
7.17.5
官方文档
Match phrase queryhttps://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-match-query-phrase.html
短语查询的作用
对关键词进行分词,并要求分词在字段中都存在,且分词顺序相同。且默认分词间没有间隔。
实战
创建索引和文档
#索引1
PUT /match_phrase_db
{}PUT /match_phrase_db/_doc/1
{"content":"I love you three thousand times a day"
}
PUT /match_phrase_db/_doc/2
{"content":"我去过安徽的黄山"
}
PUT /match_phrase_db/_doc/3
{"content":"I don't love you very much"
}#索引2
PUT /match_phrase_db2
{"settings": {"index": {"analysis.analyzer.default.type": "ik_max_word"}}
}PUT /match_phrase_db2/_doc/1
{"content":"云南省云南白药厂"
}
PUT /match_phrase_db2/_doc/2
{"content":"安徽黄山风景区"
}
基本语法
需求一:搜索条件为"I love you",对应的搜索字段是content,要求字段中必须存在"I love you"短语,且各个分词之间没有间断。
GET /match_phrase_db/_search
{"query": {"match_phrase": {"content": "I love you"}}
}
需求二:短语搜索条件为"安徽黄山"。
GET /match_phrase_db/_search
{"query": {"match_phrase": {"content": "安徽黄山"}}
}
总结:需求一只查出了id=1的文档,id=3的文档没有查出来是因为中间有其他分词;需求一没有查出结果,也是因为中间间隔了其他分词。
易错点解析
易错点:顺序相同不是指字段值的内容完全包含关键词,而是指分词顺序相同。
需求一:短语搜索"黄山风景"。
GET /match_phrase_db2/_search
{"query": {"match_phrase": {"content": "黄山风景"}}
}
POST _analyze
{"text": "安徽黄山风景区","analyzer": "ik_max_word"
}
分析:结果集为空,对"安徽黄山风景区"和"黄山风景"分词,发现分词"山风"和"风景"之间还间隔了"风景区"这个分词,所以不符合条件。
设置slop解决分词间隔数量
需求:短语搜索"安徽风景区",要求可以查到第一条文档。
分析:对第一条文档中的字段分词,"安徽黄山风景区"分词后发现安徽距离风景区相差两个字段,所以设置slop=2可以解决默认相隔字段为0的问题。
GET /match_phrase_db2/_search
{"query": {"match_phrase": {"content": {"query": "安徽风景区","slop": 2}}}
}
这篇关于Elasticsearch语法知多少之Match phrase query的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!