居然是你

搜索框关键字怎么同时匹配text字段和keyword字段?

Elasticsearch | 作者 jlk11640 | 发布于2022年02月24日 | 阅读数:1046

我做一个blog的查询,有两个字段标题和作者
subject:text类型,标题
opname:keyword类型,作者
现在搜索框中输入:张三 ElasticSearch
需要能够匹配到:标题中包含ElasticSearch 或者 作者为张三
我用了multi_match做查询
"multi_match" : {
"query" : "张三 ElasticSearch",
"fields" : [ "subject", "opname" ]
}
但是只能匹配到标题包含ElasticSearch的内容, 无法匹配到作者是张三,标题中不包含ElasticSearch的内容
我猜测是因为opname类型是keyword,导致无法匹配"张三 ElasticSearch"
请问有什么解决的办法呢?
已邀请:

Charele - Cisco4321

赞同来自:

用bool查询,里面两个should

jlk11640

赞同来自:

按楼上说的,改成了bool查询,试了下还是得把关键词预处理下,拆分成数组去匹配
"query": {
        "bool": {
            "should": [{
                "match": {
                    "subject": "张三 ElasticSearch"
                }
            }, {
                "terms": {
                    "opusername":  ["张三", "ElasticSearch"]
                }
            }]
        }
    }
 

tongchuan1992 - 学无止境、学以致用

赞同来自:

keword跟text类型对于搜索匹配的原则不一样吧,应该没法满足你的这种要求,你只能单独对每个字段进行查询。

要回复问题请先登录注册