带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(7)

简介: 带你读《Elastic Stack 实战手册》之34:——3.4.2.17.3.全文搜索/精确搜索(7)


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(6) https://developer.aliyun.com/article/1229937


6、我们再使用 WITHIN 查询范围为 10 到 22 的文档,应该只返回文档 11。


POST my-index-000001/_search
{
  "query": {
    "range": {
      "agerange": {
        "gte": 10,
        "lte": 22,
        "relation": "WITHIN"
      }
    }
  }
}
# 返回内容
{
  ......
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my-index-000001",
        "_type" : "_doc",
        "_id" : "11",
        "_score" : 1.0,
        "_source" : {
          "agerange" : {
            "lte" : 21,
            "gte" : 10
          }
        }
      }
    ]
  }
}

7、最后使用 WITHIN 查询范围为 10 到 30 的文档,应该两个文档均返回。


POST my-index-000001/_search
{
  "query": {
"range": {
      "agerange": {
        "gte": 10,
        "lte": 30,
        "relation": "WITHIN"
      }
    }
  }
}
# 返回内容
{
  ......
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my-index-000001",
        "_type" : "_doc",
        "_id" : "12",
        "_score" : 1.0,
        "_source" : {
          "agerange" : {
            "lte" : 30,
            "gte" : 20
          }
        }
      },
      {
        "_index" : "my-index-000001",
        "_type" : "_doc",
        "_id" : "11",
        "_score" : 1.0,
        "_source" : {
          "agerange" : {
            "lte" : 21,
            "gte" : 10
          }
        }
      }
    ]
  }
}

注意:range 查询 text 或者 keyword 需要打开 search.allow_expensive_queries 设置。

 

3.6 fuzzy

 

Fuzzy 查询即模糊查询,用于返回包含与搜索词相似的词的文档。

 

先来理解一下编辑距离(edit distance)的概念。编辑距离是将一个词项转换为另一个词项所需的一个字符的更改数。比如:

 

l 更改一个字符( box → fox )

l 删除一个字符( black → lack )

l 插入字符( sic → sick )

l 调换两个相邻字符( act → cat )

 

为了找到相似的词项,模糊查询在指定的编辑距离内创建一组所有可能的变体或扩展的搜索词项。然后查询返回每个展开的精确匹配。

 

使用方法:


GET term-query/_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki"
      }
    }
  }
}

相关参数:

 

l fuzziness:允许匹配的最大编辑距离。可以是 0/1/2/AUTO。

l max_expansions:创建的最大变体或者扩展词项数。默认为50。有效的控制这个参数可以降低性能损耗。

l prefix_length:在创建展开时保持不变的起始字符数。默认值为0。 注意,正常使用中大部分的字母拼写错误发生在词的结尾,而不是词的开始。 例如通过将 prefix_length 设置为 3 ,能够显著降低匹配的词项数量。

l transpositions:指示编辑是否包括两个相邻字符的换位(ab→ba)。默认值为true。

 

详细使用:

GET term-query/_search
{
  "query": {
    "fuzzy": {
      "user.id": {
        "value": "ki",
        "fuzziness": "AUTO",
        "max_expansions": 50,
        "prefix_length": 0,
        "transpositions": true,
        "rewrite": "constant_score"
      }
    }
  }
}

注意:range 查询 text 或者 keyword 需要打开 search.allow_expensive_queries 设置。

 


《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.3.全文搜索/精确搜索(8) https://developer.aliyun.com/article/1229934

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
存储 监控 数据可视化
日志分析对决:揭示 ELK 与 GrayLog 的优势和差异
日志分析对决:揭示 ELK 与 GrayLog 的优势和差异
3947 0
|
存储 缓存 算法
ES写入过程和写入原理调优及如何保证数据的写一致性(上)
ES写入过程和写入原理调优及如何保证数据的写一致性
ES写入过程和写入原理调优及如何保证数据的写一致性(上)
|
10月前
|
人工智能 并行计算 算法
Flash Decoding完整解决方案:从8倍加速原理到企业级部署实践
Flash Decoding技术通过序列长度维度并行化,突破传统注意力机制瓶颈,在长上下文推理中性能最高提升近6倍,显著降低企业AI部署成本,重新定义大模型推理效率边界。
748 0
|
SQL Java
SpringData JPA多表关联操作
SpringData JPA多表关联操作
432 0
|
NoSQL Go Redis
用 Go + Redis 实现分布式锁
用 Go + Redis 实现分布式锁
|
SQL JSON 数据格式
ES中如何实现空值和非空值的查询
ES中如何实现空值和非空值的查询
5963 0
|
Docker 容器
成功解决:Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but
这篇文章讨论了在使用Docker启动Elasticsearch容器时遇到的一个具体问题:由于配置文件`elasticsearch.yml`解析出错导致容器启动失败。文章提供了详细的排查过程,包括查看容器的日志信息、检查并修正配置文件中的错误(特别是空格问题),并最终成功重新启动了容器。
|
缓存 监控 算法
软件测试中的性能瓶颈定位与优化策略
性能瓶颈,如同隐藏在系统深处的“拦路虎”,悄无声息地制约着软件的表现。本文将揭示如何通过一系列科学方法,识别并消除这些障碍,从而显著提升软件性能,确保用户享受到流畅无阻的数字体验。
|
网络协议 Linux 缓存
|
前端开发 API 数据格式
前端常见状态码以及解决方式
前端开发中,HTTP状态码揭示了请求的处理结果。200 OK表示成功;400 Bad Request指请求错误,需检查URL、参数和数据格式;401 Unauthorized提示需验证身份,检查凭证有效性;403 Forbidden表示权限不足,检查资源授权和服务器配置;404 Not Found意味着资源未找到,确认URL正确性;500 Internal Server Error是服务器错误,需查看服务器日志和代码。针对这些问题,相应调整请求或服务器设置可解。

热门文章

最新文章