请问ES中wildcard的类似MySQL的like查询

作者 longtengjava | 发布于2018年08月31日 | 阅读数:307

先声明:"communityName"字段未做分词。请求体为“*测试*”的时候,此时查询不到数据:
{
"query":{
"wildcard":{
"communityName":"*测试*"
}
}
}


请求体为“*试*”的时候,此时查询到数据(只要两个"*"之间只有一个字符,都能查询到数据):
{
"query":{
"wildcard":{
"communityName":"*试*"
}
}
}

请问为什么,怎么才能像like一样随意使用“%xxxx%”?
已邀请:

kennywu76 - wood@Ctrip

赞同来自:

将该字段类型设置为keyword就可以满足你的要求,只是这种前缀通配符查询效率不高,在数据量很大的情况下可能会非常慢。

longtengjava - 嘿咻嘿咻

赞同来自:

使用的版本是2.x的,没有keyword字段属性

rochy - rochy_he@jointsky

赞同来自:

你可以使用 NGram 切分(按照字符切分,最大最小字符数都设置为1),
然后查询的时候使用 match_phrase_query 即可,应该比通配符高效一些

要回复问题请先登录注册