“这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战”
上一篇介绍了ElasticSearch核心基础语法第四篇,本节介绍ElasticSearch核心语法第五篇。
一、dis_max 的使用场景
在搜索时,对搜索条件尽可能多字段的匹配,哪个字段匹配相关度分高,就排在前边。
文档数据如下:
PUT /zoe_article/_doc/1
{
"name": "zhangsan",
"remark":"developer"
}
PUT /zoe_article/_doc/2
{
"name": "zhangsan",
"remark":"java developer"
}
PUT /zoe_article/_doc/3
{
"name": "lisi",
"remark":"java developer"
}
PUT /zoe_article/_doc/4
{
"name": "lisi",
"remark":"python developer"
}
复制代码
输入 "java developer zhangsan" 时,搜索结果如下:
GET /zoe_article/_search
{
"query": {
"dis_max": {
"queries": [
{
"match": {
"name": "zhangsan"
}
},
{
"match": {
"remark": "java developer"
}
}
]
}
}
}
复制代码
二、cross fields 的使用场景
直译为穿过多个字段,就是在多个字段中进行搜索。
搜索条件中的java必须在name或remark字段中匹配,developer也必须在name或remark字段中匹配。
GET /zoe_article/_search
{
"query": {
"multi_match": {
"query": "java developer",
"fields": [
"name",
"remark"
],
"type": "cross_fields",
"operator": "and"
}
}
}
复制代码
三、copy_to 的使用场景
copy_to:将多个字段复制到一个字段中,实现一个多字段组合。
如果在搜索框内输入“电脑”,点击搜索,那么是在商品属性哪个字段内进行数据匹配?如果使用_all做搜索也不合适,有些字段并不匹配,那是否可以在指定哪些字段中进行数据匹配呢?copy_to就可以实现。
如果需要使用copy_to语法,则需要在定义index的时候,手工指定mapping映射策略。
copy_to语法:
PUT /user_address/_mapping
{
"properties": {
"provice": {
"type": "text",
"analyzer": "standard",
"copy_to": "address"
},
"city": {
"type": "text",
"analyzer": "standard",
"copy_to": "address"
},
"street": {
"type": "text",
"analyzer": "standard",
"copy_to": "address"
},
"address": {
"type": "text",
"analyzer": "standard"
}
}
}
复制代码
四、match phrase 的使用场景
match phrase短语搜索,就是搜索条件不分词,代表搜索条件不可分割。
GET /zoe_article/_search
{
"query": {
"match_phras": {
"remark": "java developer"
}
}
}
复制代码
五、prefix search 的使用场景
前缀搜索,通常对keyword类型的字段进行搜索,也就是不进行分词的字段。
对title字段进行前缀搜索。
GET /zoe_article/_search
{
"query": {
"prefix": {
"title.keyword": {
"value": "掘金社区"
}
}
}
}
复制代码
六、搜索推荐的使用场景
GET /zoe_article/_search
{
"query": {
"match_phrase_prefix": {
"title": {
"query": "掘金社区",
"slop": 10,
"max_expansions": 10
}
}
}
}
复制代码
slop移动次数范围内,前缀匹配(s),max_expansions是用于指定prefix最多匹配多少个term(单词),超过这个数量就不再匹配了。
七、总结
ElasticSearch搜索语法太多了,针对不同的场景基本上都有对应的语法,可以参考官网进行进一步的阅读查询。
欢迎大家关注微信公众号(MarkZoe)互相学习、互相交流。
近期评论