问答

es库的全文检索字段怎么搜索一个不分开的词组?

作者:admin 2021-05-11 我要评论

全文搜索的字段,如果想要查询一个用空格分开的词组, 例如:‘Gritty Hope’,使用什么样的es库查询语句,能达到查询出来的结果必须都包含这个词组,就是说,只...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

全文搜索的字段,如果想要查询一个用空格分开的词组,
例如:‘Gritty Hope’,使用什么样的es库查询语句,能达到查询出来的结果必须都包含这个词组,就是说,只包含‘Gritty’或‘Hope’的数据查询不出来。这两个单词都有的,也必须是‘Gritty Hope’这样的才能查询到。应该怎么写这个查询语句啊?

查询关键词:‘Gritty Hope’,
{
"id":'001',
"title": "Gritty Hope: now what could possibly go right?"
},
{
"id":'002',
"title": "gritty hope: now what could possibly go right?"
}
这两条可以查询出来,
{
"id":'002',
"title": "The Batman Trailer: Gritty, Haunting, & Fu*king Epic"
},
{
"id":'003',
"title": "Raymond James Keeps a Hold Rating on Hope Bancorp (HOPE)"
}
这两条查询不出来。

###

可以用这个,match查询。

GET your_index/_search
{
  "query": {
    "match": {
      "title": {
        "query": "Gritty Hope",
        "operator": "AND"
      }
    }
  }
}
###

我前两天也弄过,不过是标签匹配的问题。本人也是新手,刚刚知道一点,给你说一下思路。

  1. 首先es会对所有的文档 text 类型进行分词的,英文默认是 空格区分,每一个单词就是底层的一个索引
  2. 不同的单词根据你当前的索引,他的权重是不一样的。
  3. 你这个需求换一种描述(可能不准确,但是对于我的标签来说很适合)可以是这样的,我想查阅的这一句话,匹配到了几个分词后的内容,就是我不想要他的权重分,我只是想知道次数,或者每一个单词的权重为 1,最后相加起来
  4. 查询就可以这样做:使用bool查询,把你要查询的单词通过空格分开,对每一个单词组合成 bool 下面的 should 查询,filter查询通过constant_score把权重设为1.大概按照下面
  5. 最后筛选权重等于单词分割后的大小,比如 大于2
{
  "query": {
    "bool": {
      "should": [
        {"constant_score": {
          "filter": {"term": {
            "tags": "aaaa" // 这个地方就是需要将单词空格区分开,每一个都这么组合
          }
          }
        }},
        {"constant_score": {
          "filter": {"term": {
            "tags": "bbb" // 这个地方就是需要将单词空格区分开,每一个都这么组合
          }
          }
        }}
      ]
    }
  }
}

这个查询比如索引有数据:1aaa bbb 2aaa ccc 3bbb ccc
那么结果就是:1的得分为2, 2,3的得分为1

我也是刚知道es,我的需求可以这么做。有知道更好的可以留言:核心的诉求就是:我不要默认的评分,而是想知道他匹配成功了几次

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • es库的全文检索字段怎么搜索一个不分开

    es库的全文检索字段怎么搜索一个不分开

  • nodejs的buffer数组中文编码是如何转换

    nodejs的buffer数组中文编码是如何转换

  • vue后台管理 做一个读取卡号的功能,怎

    vue后台管理 做一个读取卡号的功能,怎

  • forge 控制正交视图

    forge 控制正交视图

腾讯云代理商
海外云服务器