ElasticSearch中文分词和模糊查询

这篇具有很好参考价值的文章主要介绍了ElasticSearch中文分词和模糊查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

        ElasticSearch是一个一个分布式的实时文档存储,每一个字段都可以被索引与搜索,并且能支持PB级别的结构化或者非结构化数据。早期我们应用的全局搜索是简单的SQL模糊查询,为了分担数据库压力所以用了ES,选择他的原因除了以上几点外,还有其提供的API方式简单,于任何对接的编程语言都适用。以下将以PHP的业务场景完善搜索功能。

es分词查询模糊匹配,php,elasticsearch,中文分词,数据库

环境

ThinkPHP5.1

ElasticSearch7.8

PHP7.3

功能迭代简介

        最开始的ES取代方法解决了搜索速度问题,后来新增的ik分词器,解决了搜索词条单一问题。单也正是中文分词原因,对每句话都是拆解成指定粒度的词。当遇到单词时,一般只会对一句话里的单词进行拆解,而搜索时需要输入某个字母,希望输出的是带字母后面的词条,也就是模糊查询。经过翻阅文档,发现了即时搜索。

       即时搜索或输入即搜索(search-as-you-type),就是当用户习惯在输完查询内容之前,就能为他们展现搜索结果,不仅能在更短的时间内得到搜索结果,也能引导用户搜索索引中真实存在的结果。例如,输入 dvd r ,即时搜索会得到:dvd r9s 和 dvd r9sk等 , 以下将通过完整示例演示效果。

配置索引的映射

        关于ElasticSearch环境搭建和基本操作在前面文章有说明,这里就假装已经创建了索引,以下是索引的映射。还有文档的添加也是根据你自己的需求定义了,不管是定时任务还是业务节点触发,亦或是采集工具同步等。

{
  "mappings": {
    "_doc": {
      "properties": {
        "class_id": {
          "type": "long"
        },
        "goods_name": {
          "type": "text",
          "analyzer": "ik_smart"
        },
        "goods_sort": {
          "type": "keyword"
        },
        "id": {
          "type": "keyword"
        },
        "price": {
          "type": "long"
        },
        "single_goods_name": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "state": {
          "type": "keyword"
        },
        "v": {
          "type": "long"
        }
      }
    }
  }
}

前台搜索

1.  即搜索示例

{
    "match_phrase_prefix" : {
        "brand" : {
            "query": "walker johnnie bl", 
            "slop":  10
        }
    }
}

2. 业务代码

public function queryData($key, $sort, $from = 0, $size = 10)
{
	$from = $from * $size;
	$indexName = Env::get('elasticsearch.goods_index') ?? 'products';

	$params = [
		'index' => $indexName,
		'client' => [
			'timeout' => 10,        
			'connect_timeout' => 10
		],
		'body' => [
			'from' => $from,
			'size' => $size,
			'query' => [
				'bool' => [
					'should' => [
						[
							'multi_match' => [
								'query' => $key,
								'fields' => [
									'goods_name^2',
									'single_goods_name'
								],
							],
						],
						[
							'wildcard' => [
								'single_goods_name' => "$key*"
							]
						],
						[
							'fuzzy' => [
								'single_goods_name' => [
									'value' => $key
								]
							]
						],
						[
							'match_phrase_prefix' => [
								'single_goods_name' => "$key"
							]
						],
					],
				],
			],
			'sort' => [
				['_score' => "desc"],
				['goods_sort' => 'desc']
			],
		]
	];

	return $this->es->search($params);
}

3. 效果演示

es分词查询模糊匹配,php,elasticsearch,中文分词,数据库文章来源地址https://www.toymoban.com/news/detail-770340.html

到了这里,关于ElasticSearch中文分词和模糊查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch07:ES中文分词插件(es-ik)安装部署

    在中文数据检索场景中,为了提供更好的检索效果,需要在ES中集成中文分词器,因为ES默认是按照英文的分词规则进行分词的,基本上可以认为是单字分词,对中文分词效果不理想。 ES之前是没有提供中文分词器的,现在官方也提供了一些,但是在中文分词领域,IK分词器是

    2024年02月03日
    浏览(81)
  • Elasticsearch专栏-5.es基本用法-分词查询

    所谓分词,就是把一段语句,分割成一个个单词的过程。比如\\\"717 Hendrickson Place\\\"短语,分词后就是三个单词,即717、hendrickson、place。注意,分词后的单词默认都是小写。 分词查询,指的就是查询时,把要查询的语句(字符串)先进行分词,然后拿分词后的单词去文档集合中比

    2024年01月16日
    浏览(44)
  • elasticSearch7版本文档中文属性模糊查询不准确

    1、问题:es文档中的某个属性值name的值如下所示 name\\\":\\\"catalog=Catalog(value=699015935012372480, displayName=/默认分组), status=3, updaterName=admin, updateTime=2023-02-01 14:33:17)status:已发布” 通过java模糊查询的api(QueryBuilders.fuzzyQuery)查询name为“已”的时候可以查询,查询为“已发布”的时候查

    2024年02月02日
    浏览(54)
  • ElasticSearch入门:使用ES来实现模糊查询功能

    本文针对在工作中遇到的需求:通过es来实现 模糊查询 来进行总结;模糊查询的具体需求是:查询基金/A股/港股等金融数据,要求可以根据 字段 , 拼音首字母 , 部分拼音全称 进行联想查询;需要注意的是,金融数据名称中可能不止包含汉字,还有英文,数字,特殊字符等

    2023年04月09日
    浏览(49)
  • ES&elasticsearch-header菜鸟教程06--模糊查询

    一 prefix前缀查询 二 wildcard通配符查询 三 regexp正则查询

    2024年02月15日
    浏览(36)
  • Elasticsearch从入门到精通-05ES匹配查询

    👏作者简介:大家好,我是程序员行走的鱼 📖 本篇主要介绍和大家一块学习一下ES各种场景下的匹配查询,有助于我们在项目中进行综合使用 创建索引并指定ik分词器: 添加数据: 需要搜索的document中的remark字段包含java和developer词组 上述语法中,如果将operator的值改为or。则与

    2024年03月27日
    浏览(87)
  • ElasticSearch系列 - SpringBoot整合ES之全文搜索匹配查询 match

    官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html 权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/structured-search.html 1. 数据准备 官方测试数据下载地址:https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip ,数据量很大,我们自己构造数据吧。 2. m

    2023年04月08日
    浏览(52)
  • Elasticsearch7.15.2 安装ik中文分词器后启动ES服务报错的解决办法

    下载elasticsearch ik中文分词器,在elasticsearch安装目录下的plugins文件夹下创建名为ik的文件夹,将下载的ik中文分词器解压缩到新建的ik文件夹下,再次运行 ./bin/elasticsearch启动ES服务时出现以下错误: Exception in thread \\\"main\\\" java.nio.file.NotDirectoryException: /Users/amelia/work/elasticsearch-7.1

    2024年02月12日
    浏览(59)
  • ElasticSearch系列 - SpringBoot整合ES:短语匹配查询 match_phrase

    1. ElasticSearch match_phrase查询是什么?它与match查询有什么区别? match_phrase查询是一种用于匹配短语的查询方式,可以用于精确匹配多个单词组成的短语。它会将查询字符串分解成单词,然后按照顺序匹配文档中的单词,只有当文档中的单词顺序与查询字符串中的单词顺序完全

    2024年02月12日
    浏览(52)
  • ElasticSearch关于自定义分词器模糊检索数字+字母

    之前的系统由于一些表的数据已经达到1~2百万行的数据了,而且还在与日俱增,一些条件比较复杂的检索,已经明显感觉到比较慢,影响用户的使用体验。所以引入的ElasiticSearch进行检索优化,效果还是比较好的。因为之前都没有怎么涉及到模糊检索这一块需求,只是为了速

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包