Elasticsearch干货(九):queryString中检索词加不加引号?

本文探讨了Elasticsearch中queryString的使用,特别是检索词是否加引号的影响。加引号在早期Lucene中被认为是精准匹配,但实际上是短语匹配。为实现精准匹配,可以使用term或match_phrase,调整slop参数。同时,文章指出match检索不支持多词数组,并分享了解决方法。最后强调理解Lucene的重要性。
摘要由CSDN通过智能技术生成

对于刚接触搜索或者Elasticsearch的小白来说对queryString可能接触的不多,但是对于早期从事搜索的人来说queryString并不会陌生,它可以理解成检索表达式,但并不是elasticsearch的queryDSL,他遵从的是Lucene语法。elasticsearch同样有接口应用于queryString。下面上个例子:

{
  "from": 0,
  "size": 100,
  "query": {
    "query_string": {
      "query": "TITLE:无人机"
    }
  }
}

“TITLE:无人机”就是一个queryString,是一个字符串,表示在TITLE字段中查询匹配“无人机”。
它还支持一些参数:

{
  "from": 0,
  "size": 100,
  "query": {
    "query_string": {
      "query": "TITLE:无人机"
      "fields": [],
      "type": "best_fields",
      "default_operator": "or",
      "max_determinized_states": 10000,
      "enable_position_increments": true,
      "fuzzy_transpositions": true,
      "boost": 1
    }
  }
}

具体的关于queryString本篇不再过多介绍,这里不是重点。

参考官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html

从上述例子中我们知道了我们的需求是从TITLE中匹配“无人机”这个词。这个检索式没任何问题,因为一般的分词器都会把无人机这个词分出来,但随着我们检索的深入,我们会遇到一个问题,比如我们要搜索“铝合金轮毂”这个词,一般的分词器都不会分出这个词来,也就是我们所说的专有名词词库。那么会出现什么问题呢?我们试试就知道了

{
  "query": {
    "query_string": {
      "query": "TITLE:铝合金轮毂"
    }
  }
}

我们会发现匹配结果包含很多铝合金和轮毂的文档,可想而知是因为在检索的时候,是先把“铝合金轮毂‘这个词先分词,再去检索的,类似match检索。那么这样的话就会带来两个问题:

  1. 如果我不想用match,我想精准匹配只返回带“铝合金轮毂”而不是“铝合金”+“轮毂”怎么办?
  2. 如果词库里没有“铝合金轮毂”这个词,该怎么做精准匹配?

说到这,可能有些人就会说了&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值