ELK,萌萌哒

ES查询怎么才能实现类似contains的功能?

Elasticsearch | 作者 God_lockin | 发布于2018年07月24日 | 阅读数:8283

现在某些业务场景是这样的
 
文档:
“上海浦东图书馆馆藏图书”
“上海浦东图书馆馆藏日志”
“今天去了上海浦东图书馆”
“上海长宁图书馆”
“上海黄浦图书馆”
“上海哪个书店图书”
“上海又一个图书馆馆藏图书”
 
搜索内容:
“上海浦东图书馆馆藏图书很有料”
 
返回结果预期:
“上海浦东图书馆馆藏图书”
 
不能返回其他内容
 
可以归纳为文档中某一字段“name”,需要被包含于搜索内容里面,*doc["name"].value* == queryString
 
各位大佬有没啥建议?
已邀请:

rochy - rochy_he

赞同来自: God_lockin

在ES2.4.X可以使用下面的查询语句
{
"query": {
"function_score": {
"query": {
"match": {
"name": "上海浦东图书馆馆藏图书很有料"
}
},
"script_score": {
"script": {
"script": "return query_str.contains(_source.name) ? 2.0 : 0.0",
"params": {
"query_str": "上海浦东图书馆馆藏图书很有料"
}
}
},
"boost_mode": "replace"
}
},
"min_score": 2
}

ES6.X 你可以按照新的脚本语法修改下即可

God_lockin

赞同来自:

但是检索结果不能超过检索条件
搜索
“上海浦东图书馆馆藏图书很有料”
的时候不能返回
“上海浦东图书馆馆藏图书很有料是真的”

要回复问题请先登录注册